python - PySpark:连接两个 Spark 数据帧时如何将列分组为列表?

标签 python apache-spark pyspark

我想在名称上加入以下 Spark 数据框:

df1 = spark.createDataFrame([("Mark", 68), ("John", 59), ("Mary", 49)], ['Name', 'Weight'])

df2 = spark.createDataFrame([(31, "Mark"), (32, "Mark"), (41, "John"), (42, "John"), (43, "John")],[ 'Age', 'Name'])

但我希望结果是以下数据框:

df3 = spark.createDataFrame([([31, 32], "Mark", 68), ([41, 42, 43], "John", 59), `(None, "Mary", 49)],[ 'Age', 'Name', 'Weight'])

最佳答案

您可以使用模块pyspark.sql.functions中的collect_list。它收集与给定键相关的给定列的所有值。如果您想要一个包含唯一元素的列表,请使用collect_set

import pyspark.sql.functions as F

df1 = spark.createDataFrame([("Mark", 68), ("John", 59), ("Mary", 49)], ['Name', 'Weight'])
df2 = spark.createDataFrame([(31, "Mark"), (32, "Mark"), (41, "John"), (42, "John"), (43, "John")],[ 'Age', 'Name'])

df2_grouped = df.groupBy("Name").agg(F.collect_list(F.col("Age")).alias("Age"))
df_joined = df2_grouped.join(df1, "Name", "outer")

df_joined.show()

结果:

+----+------------+------+
|Name|         Age|Weight|
+----+------------+------+
|Mary|        null|    49|
|Mark|    [32, 31]|    68|
|John|[42, 43, 41]|    59|
+----+------------+------+

关于python - PySpark:连接两个 Spark 数据帧时如何将列分组为列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40049380/

相关文章:

python - mypy:对没有运行时成本的类型提出更高的要求

amazon-web-services - 无法使用 pyspark 连接到 EC2 中的 Spark 集群

java - 如何使用spark java api在cassandra表中进行平均值、最大总和等聚合

python - 在 Pyspark 中拆分 RDD 分区中的数组

apache-spark - pyspark 中 parquet writer 保存的文件数量

python - Python bottle 中的自调用

python - 删除多索引数据框中具有重复索引的行

python - Pandas 数据框 : Check if data is monotonically decreasing

apache-spark - 与仅使用 Spark 相比,将 Kafka 与 Spark 结合使用的优势

apache-spark - Spark - 按键对 DStream 进行排序并限制为 5 个值