我有一个给定的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)
我的问题是:
Spark是否提供更好/更有效的方式来获得此结果?
我当时正在考虑使用地图-但是如何获取所需的列作为列表,以便能够像在removeDuplicates lambda中那样使用'distinct'方法?
编辑:我用java标记标记了此主题,因为与我所用的语言(scala或java)无关,我都会收到answear :) Edit2:typos
java scala apache-spark apache-spark-sql apache-spark-dataset