我有一个包含CloudWatch
列的PySpark数据框。该列包含数组中需要删除的重复字符串。例如,一行条目可能看起来像console.logs()
。假设我的数据框名为ArrayType(StringType())
,而我的列名为[milk, bread, milk, toast]
。我需要类似的东西:
df
我的直觉是对此有一个简单的解决方案,但是在浏览stackoverflow 15分钟之后,我发现没有比分解该列,删除整个数据帧上的重复项然后再进行分组更好的了。 got 是一种我没想到的简单方法,对吗?
我正在使用Spark版本'2.3.1'。
答案 0 :(得分:5)
对于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
+ groupBy
和collect_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"))