【问题标题】:How to add a column to pyspark df, the data format should be a list, and come from grouped data from the raw table如何在pyspark df中添加列,数据格式应该是列表,并且来自原始表中的分组数据
【发布时间】:2021-12-28 14:05:12
【问题描述】:
我是 pyspark 的新手,不确定是否有简单的方法来做到这一点。
我有一个与人们感兴趣的 df,例如:
| name |
interest |
| A |
gym |
| A |
food |
| A |
games |
| B |
games |
从这个df,我想创建一个新的,如下所示:
| name |
interests |
| A |
gym;food;games |
| B |
games |
有人可以帮忙吗?如果我没有足够清楚地解释这个问题,请提前道歉。
【问题讨论】:
标签:
python
dataframe
pyspark
apache-spark-sql
【解决方案1】:
您可以使用来自pyspark.sql.functions 的concat_ws 和collect_list:
from pyspark.sql import functions as F
df.groupBy("name").agg(
F.concat_ws(";", F.collect_list("interest")
).alias("interest")).show(truncate=False)
打印:
+----+--------------+
|name|interest |
+----+--------------+
|A |gym;food;games|
|B |games |
+----+--------------+
记得把它分配回一个新的数据框
-
concat_ws:使用给定的分隔符将多个输入字符串列连接到一个字符串列中。
-
collect_list:
【解决方案2】:
schema = X.schema
X_pd = X.toPandas()
_X = spark.createDataFrame(X_pd,schema=schema)
del X_pd