簡體   English   中英

Spark-Scala:從列數據框中選擇不同的數組,而忽略順序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM