[英]Remove duplicates from PySpark array column
我有一個包含ArrayType(StringType())
列的 PySpark Dataframe。 此列包含我需要刪除的數組內的重復字符串。 例如,一行條目可能看起來像[milk, bread, milk, toast]
。 假設我的數據arraycol
名為df
而我的列名為arraycol
。 我需要類似的東西:
df = df.withColumn("arraycol_without_dupes", F.remove_dupes_from_array("arraycol"))
我的直覺是存在一個簡單的解決方案,但是在瀏覽 stackoverflow 15 分鍾后,我沒有找到比分解列、刪除完整數據幀上的重復項,然后再次分組更好的方法。 這里一定是一個簡單的方法,我只是沒想到吧?
我使用的是 Spark 版本 2.4.0
對於 pyspark 2.4+ 版,您可以使用pyspark.sql.functions.array_distinct
:
from pyspark.sql.functions import array_distinct
df = df.withColumn("arraycol_without_dupes", array_distinct("arraycol"))
對於舊版本,您可以使用API函數做這個explode
+ groupBy
和collect_set
,但udf
可能是更有效的在這里:
from pyspark.sql.functions import udf
remove_dupes_from_array = udf(lambda row: list(set(row)), ArrayType(StringType()))
df = df.withColumn("arraycol_without_dupes", remove_dupes_from_array("arraycol"))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.