我有一个数据框(通过从 Azure 中的多个 blob 加载创建),其中有一列是 ID 列表。 现在,我想要整个列中的唯一 ID 列表:
这是一个例子 -
df -
| col1 | col2 | col3 |
| "a" | "b" |"[q,r]"|
| "c" | "f" |"[s,r]"|
这是我预期的回应:
resp = [q, r, s]
知道如何到达那里吗?
我当前的方法是将 col3 中的字符串转换为 python 列表,然后可能以某种方式将它们展平。
但到目前为止我还无法做到这一点。我尝试在 pyspark 中使用用户定义的函数,但它们只返回字符串而不返回列表。
FlatMap 仅适用于 RDD,不适用于 Dataframe,因此它们不适用。
也许有一种方法可以在从 RDD 到数据帧的转换过程中指定这一点。但不知道该怎么做。
最佳答案
这是一个仅使用 DataFrame 函数的方法:
df = spark.createDataFrame([('a','b','[q,r,p]'),('c','f','[s,r]')],['col1','col2','col3'])
df=df.withColumn('col4', f.split(f.regexp_extract('col3', '\[(.*)\]',1), ','))
df.select(f.explode('col4').alias('exploded')).groupby('exploded').count().show()
关于python - Pyspark Dataframe 从列中获取唯一元素,并将字符串作为元素列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47793412/