I have a given DataSet :
+-------------------+--------------------+
| date| products|
+-------------------+--------------------+
|2017-08-31 22:00:00|[361, 361, 361, 3...|
|2017-09-22 22:00:00|[361, 362, 362, 3...|
|2017-09-21 22:00:00|[361, 361, 361, 3...|
|2017-09-28 22:00:00|[360, 361, 361, 3...|
其中,products列是一个包含可能重复项的字符串数组。
我想要删除这些重复项(在同一行内)。
我的做法基本上是编写了一个UDF函数,如下:
val removeDuplicates: WrappedArray[String] => WrappedArray[String] = _.distinct
val udfremoveDuplicates = udf(removeDuplicates)
这个解决方案给我带来了正确的结果:
+-------------------+--------------------+--------------------+
| date| products| rm_duplicates|
+-------------------+--------------------+--------------------+
|2017-08-31 22:00:00|[361, 361, 361, 3...|[361, 362, 363, 3...|
|2017-09-22 22:00:00|[361, 362, 362, 3...|[361, 362, 363, 3...|
我的问题是:
Spark提供了更好/更有效的方法来获取此结果吗?
我正在考虑使用map,但如何将所需列作为列表获取,以便像我的removeDuplicates lambda中一样使用“distinct”方法?
编辑:我标记了这个主题的Java标签,因为对我来说无论在哪种语言(Scala或Java)中获得答案都没有关系:) 编辑2:错字
.toList
,并更新你的UDF类型注释以返回一个List。 - eliasah":123:345:126:"
,并搜索<delimiter><element><delimiter>
的子字符串。即使是数组等复杂数据结构也需要比字符串处理更多的处理。 - Sim