小编zby*_*ekt的帖子

删除Spark数组列中的重复项

我有一个给定的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...|
Run Code Online (Sandbox Code Playgroud)

产品列是包含可能重复项的字符串数组。

我想删除此重复项(在一排之内)

我所做的基本上是编写像这样的UDF函数

 val removeDuplicates: WrappedArray[String] => WrappedArray[String] = _.distinct
 val udfremoveDuplicates = udf(removeDuplicates)
Run Code Online (Sandbox Code Playgroud)

这个解决方案给了我适当的结果:

+-------------------+--------------------+--------------------+
|               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...|
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  1. Spark是否提供更好/更有效的方式来获得此结果?

  2. 我当时正在考虑使用地图-但是如何获取所需的列作为列表,以便能够像在removeDuplicates lambda中那样使用'distinct'方法?

编辑:我用java标记标记了此主题,因为与我所用的语言(scala或java)无关,我都会收到answear :) Edit2:typos

java scala apache-spark apache-spark-sql apache-spark-dataset

5
推荐指数
1
解决办法
2084
查看次数