python - Pyspark Dataframe 从列中获取唯一元素,并将字符串作为元素列表

标签 python dataframe pyspark apache-spark-sql rdd

我有一个数据框(通过从 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/

相关文章:

python - 从 pySpark 中的 dict 构建一行

java - C中的 "nonmodifiable"和其他编程语言中的 "immutable"意思一样吗?

python - 根据下一个值更新 Pandas 数据框

python - Pandas:如何交换行的单元格值,以便它们按字母顺序排列

dataframe - Pyspark Dataframe 差异 - param != null 不返回的地方?

apache-spark - 使用pyspark连接数据帧的多列

python - 配置 Pycharm 以运行 Pyinstaller

python - 从域 ncfile 中提取数据

python - 是否可以在 Django 管理面板中过滤外键的选择?

python - 将 Python 脚本转换为能够在 Spark/Hadoop 中运行