Spark如何合并两个数组列且保留重复元素?
Spark合并两个数组列并保留所有重复元素的实现方法
Spark提供的array_union函数在合并数组时会自动去重,但如果需要合并两个数组列且保留所有重复元素(包括数组内部的重复项以及两个数组间的重复项),可以使用array_concat函数来实现。
原始数据
+---------+---------+ |field |field1 | +---------+---------+ |[1, 2, 2]|[1, 2, 2]| +---------+---------+
实现代码
替换原本的array_union,改用array_concat:
.withColumn("union", array_concat(col("field"), col("field1")))
执行结果
执行后会得到包含所有元素的合并数组,符合期望结果:
+---------+---------+------------------+ |field |field1 |union | +---------+---------+------------------+ |[1, 2, 2]|[1, 2, 2]|[1, 2, 2, 1, 2, 2]| +---------+---------+------------------+
补充说明
array_concat的作用是将多个数组按顺序拼接,不会对元素做去重处理,完全保留所有原始元素的顺序和重复项。- 该函数支持传入多个数组列参数,不止局限于两个数组的合并。
内容的提问来源于stack exchange,提问作者Alexander Lopatin
相关产品推荐
相关产品推荐

