gpt4 book ai didi

python - PySpark Dataframe.groupBy MapType 列

转载 作者:太空宇宙 更新时间:2023-11-03 10:59:17 25 4
gpt4 key购买 nike

我有一个带有 MapType 列的数据框,其中键是一个 id,值是另一个具有两个数字、一个计数器和一个收入的 StructType。

看起来像这样:

+--------------------------------------+
| myMapColumn |
+--------------------------------------+
| Map(1 -> [1, 4.0], 2 -> [1, 1.5]) |
| Map() |
| Map(1 -> [3, 5.5]) |
| Map(1 -> [4, 0.1], 2 -> [6, 101.56]) |
+--------------------------------------+

现在我需要对每个 id 的这两个值求和,结果将是:

+----------------------+
| id | count | revenue |
+----------------------+
| 1 | 8 | 9.6 |
| 2 | 7 | 103.06 |
+----------------------+

我实际上不知道该怎么做,也找不到针对这种特殊情况的文档。我尝试使用 Dataframe.groupBy 但无法使其工作:(

有什么想法吗?

我正在使用 Spark 1.5.2 和 Python 2.6.6

最佳答案

假设架构等同于此:

root
|-- myMapColumn: map (nullable = true)
| |-- key: integer
| |-- value: struct (valueContainsNull = true)
| | |-- _1: integer (nullable = false)
| | |-- _2: double (nullable = false)

您只需要explode 和一个简单的聚合:

from pyspark.sql.functions import col, explode, sum as sum_

(df
.select(explode(col("myMapColumn")))
.groupBy(col("key").alias("id"))
.agg(sum_("value._1").alias("count"), sum_("value._2").alias("revenue")))

关于python - PySpark Dataframe.groupBy MapType 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36041398/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com