[英]Spark-scala: Select distinct arrays from a column dataframe ignoring ordering
我一直在思考下一個問題,但尚未解決:我有一個只有一列A
的數據框df
,這些元素具有dataType Array[String]
。 我正在嘗試獲取A
所有不同數組,而不是在數組中導入字符串的順序。
例如,如果數據框如下:
df.select( “A”)。節目()
+--------+
|A |
+--------+
|[a,b,c] |
|[d,e] |
|[f] |
|[e,d] |
|[c,a,b] |
+--------+
我想獲取數據框
+--------+
|[a,b,c] |
|[d,e] |
|[f] |
+--------+
我試圖做一個distinct(),dropDuplicates()和其他函數,但是它不起作用。
我將不勝感激任何幫助。 先感謝您。
您可以使用collect_list
函數收集該column
所有arrays
,然后使用udf
函數對單個數組進行排序,最后返回所收集列表的distinct
數組。 最后,您可以使用explode
函數將收集的不同數組分布到單獨的rows
import org.apache.spark.sql.functions._
def distinctCollectUDF = udf((a: mutable.WrappedArray[mutable.WrappedArray[String]]) => a.map(array => array.sorted).distinct)
df.select(distinctCollectUDF(collect_list("A")).as("A")).withColumn("A", explode($"A")).show(false)
您應該得到想要的結果。
您可以嘗試使用contains方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.