簡體   English   中英

從 PySpark 數組列中刪除重復項

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

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