我有兩個資料框,例如df_emp和df_dept:
df_emp:
id Name
1 aaa
2 bbb
3 ccc
4 ddd
df_dept:
dept_id dept_name employees
1 DE [1, 2]
2 DA [3, 4]
加入后的預期結果:
dept_name employees employee_names
DE [1, 2] [aaa, bbb]
DA [3, 4] [ccc, ddd]
知道如何使用簡單的連接或 udf 來做到這一點嗎?
uj5u.com熱心網友回復:
它可以在沒有 UDF 的情況下完成。首先explode是陣列,然后加入和分組。
輸入資料:
from pyspark.sql import functions as F
df_emp = spark.createDataFrame(
[(1, 'aaa'),
(2, 'bbb'),
(3, 'ccc'),
(4, 'ddd')],
['id', 'Name']
)
df_dept = spark.createDataFrame(
[(1, 'DE', [1, 2]),
(2, 'DA', [3, 4])],
['dept_id', 'dept_name', 'employees']
)
腳本:
df_dept_exploded = df_dept.withColumn('id', F.explode('employees'))
df_joined = df_dept_exploded.join(df_emp, 'id', 'left')
df = (
df_joined
.groupBy('dept_name')
.agg(
F.collect_list('id').alias('employees'),
F.collect_list('Name').alias('employee_names')
)
)
df.show()
# --------- --------- --------------
# |dept_name|employees|employee_names|
# --------- --------- --------------
# | DE| [1, 2]| [aaa, bbb]|
# | DA| [3, 4]| [ccc, ddd]|
# --------- --------- --------------
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/479944.html
標籤:列表 阿帕奇火花 加入 pyspark apache-spark-sql
上一篇:使用其他列值串列生成新列
