我需要根据给定的输入数据集在 pyspark 中创建一个新的数据框,如下所示
I need to create a new dataframe as below in pysaprk from given input dataset
薪水相同的人应该放在同一条记录中,姓名之间用“,”隔开。
输入数据集:
预期数据集
您可以按如下方式实现 -
在 Salary
上应用 groupBy
并使用 - collect_list 将所有 Name
组合在 ArrayType()
中
此外,您可以选择使用 - concat_ws
将其转换为 StringType
数据准备
df = pd.read_csv(StringIO("""Name,Salary
abc,100000
bcd,20000
def,100000
pqr,20000
xyz,30000
""")
,delimiter=','
).applymap(lambda x: str(x).strip())
sparkDF = sql.createDataFrame(df)
sparkDF.groupby("Salary").agg(F.collect_list(F.col("Name")).alias('Name')).show(truncate=False)
+------+----------+
|Salary|Name |
+------+----------+
|100000|[abc, def]|
|20000 |[bcd, pqr]|
|30000 |[xyz] |
+------+----------+
连接 WS
sparkDF.groupby("Salary").agg(F.concat_ws(",",F.collect_list(F.col("Name"))).alias('Name')).show(truncate=False)
+------+-------+
|Salary|Name |
+------+-------+
|100000|abc,def|
|20000 |bcd,pqr|
|30000 |xyz |
+------+-------+
薪水相同的人应该放在同一条记录中,姓名之间用“,”隔开。
输入数据集:
预期数据集
您可以按如下方式实现 -
在 Salary
上应用 groupBy
并使用 - collect_list 将所有 Name
组合在 ArrayType()
此外,您可以选择使用 - concat_ws
将其转换为 StringType数据准备
df = pd.read_csv(StringIO("""Name,Salary
abc,100000
bcd,20000
def,100000
pqr,20000
xyz,30000
""")
,delimiter=','
).applymap(lambda x: str(x).strip())
sparkDF = sql.createDataFrame(df)
sparkDF.groupby("Salary").agg(F.collect_list(F.col("Name")).alias('Name')).show(truncate=False)
+------+----------+
|Salary|Name |
+------+----------+
|100000|[abc, def]|
|20000 |[bcd, pqr]|
|30000 |[xyz] |
+------+----------+
连接 WS
sparkDF.groupby("Salary").agg(F.concat_ws(",",F.collect_list(F.col("Name"))).alias('Name')).show(truncate=False)
+------+-------+
|Salary|Name |
+------+-------+
|100000|abc,def|
|20000 |bcd,pqr|
|30000 |xyz |
+------+-------+