删除数组列中的重复项 Spark
我有这个 DataSet :
在哪里列 products - 这是一系列具有可能被称为元素的行数。
我想删除它重复 /在一行中/
我所做的基本上写了这样的功能 UDF
这个决定给了我正确的结果。 :
我的问题如下 :
提供谎言 Spark 最好/一种更有效的方法来实现这个结果 ?
我想过关于使用该卡 - 但是如何以列表的形式获取所需的列,以便能够使用该方法 'distinct', 如在我的那样
removeDuplicates
lambda ?
Edit: 我标明了这个主题标签 java, 因为对我来说没关系,哪种语言 /scala 或者 java/ 我会得到 answear :/
Edit2: 挖掘
+-------------------+--------------------+
| 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 最好/一种更有效的方法来实现这个结果 ?
我想过关于使用该卡 - 但是如何以列表的形式获取所需的列,以便能够使用该方法 'distinct', 如在我的那样
removeDuplicates
lambda ?
Edit: 我标明了这个主题标签 java, 因为对我来说没关系,哪种语言 /scala 或者 java/ 我会得到 answear :/
Edit2: 挖掘
没有找到相关结果
已邀请:
2 个回复
帅驴
赞同来自:
它没有内置原始的统一统一。
如果您处理巨大的数据量和/或者阵列的值具有唯一的属性,然后
值得思考的实施 UDF
.
建筑
在幕后,然后通过它来构建一个不同元素的数组。 从表现的角度来看,这里有两个问题:
可变的集合 Scala 不是很有效,所以在胆量中 Spark 你会找到很多系列 Java 和循环
. 如果您需要极端性能,您可以实现自己的通用 distinct, 使用更快的数据结构。
普遍实施
不使用数据的任何属性。 例如,如果阵列平均较小,则将其直接构建的简单实现并执行线性搜索对重复项,这可以比构建复杂数据结构的代码更好地工作,尽管其理论复杂性
. 例如,如果值只能在小拨号中的小范围或字符串中只能是数字,则可以使用位拨号实现统一。
同样,如果您有搞笑数据卷,则应考虑这些策略。 您的简单实现是几乎任何情况的理想选择。
窦买办
赞同来自:
作为
您可以使用以下方法删除重复项。
当然,为此,您需要
你必须得到以下结论。
我希望答案是有用的