从 PySpark 数组列中删除重复项



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

相关内容

  • 没有找到相关文章

最新更新