gpt4 book ai didi

python - 从 PySpark 数组列中删除重复项

转载 作者:太空宇宙 更新时间:2023-11-04 07:51:26 39 4
gpt4 key购买 nike

我有一个包含 ArrayType(StringType()) 列的 PySpark Dataframe。此列包含我需要删除的数组中的重复字符串。例如,一行条目可能看起来像 [milk, bread, milk, toast]。假设我的数据框名为 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"))

对于旧版本,您可以使用 explode + groupBycollect_set 通过 API 函数执行此操作,但是 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"))

关于python - 从 PySpark 数组列中删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54185710/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com