python - pyspark,通过别名按数组特定属性分组
问题描述
我的数据框有这个结构
root: array (nullable = true)
|-- element: struct (containsNull = true)
|-- id: long (nullable = true)
|-- time: struct (nullable = true)
|-- start: string (nullable = true)
|-- end: string (nullable = true)
|-- properties: array (nullable = true)
|-- element: struct (containsNull = true)
|-- key: string (nullable = true)
|-- value: string (nullable = true)
我需要在这个中进行改造:
root
|-- start: string (nullable = true)
|-- end: string (nullable = true)
|-- id: long (nullable = true)
|-- key: string (nullable = true)
|-- value: string (nullable = true)
在列上扩展我的键值数组。
使用 pivot 和 groupby 我可以转换我的数据框:
df2 = df.groupby("start","end","id").pivot("prop.key").agg(last("prop.value", True))
但我还需要按一个(或多个)属性(键)值分组,但我不能。
df2 = df.groupby("start","end","id","car_type","car_loc").pivot("prop.key").agg(last("prop.value", True))
其中“car_type”、“car_loc”是属性(prop.keys)。我需要通过它们的别名调用这些属性(不使用 getItem())。可能吗?任何人都可以帮助我吗?
谢谢你
编辑
一个例子。我有这种情况:
+---+----------+----------+--------------------+
| id| start | end | prop|
+---+----------+----------+--------------------+
| 1|2019-05-12|2020-05-12|[car_type, fiat |
| 1|2019-05-12|2020-05-12|[car_loc, home |
| 1|2019-05-12|2020-05-12|[car_num, xd7890 |
| 2|2019-05-13|2020-05-13|[car_type, fiat |
| 2|2019-05-13|2020-05-13|[car_loc, home |
| 2|2019-05-13|2020-05-13|[car_num, ae1234 |
| 1|2019-05-12|2020-05-12|[car_type, ford |
| 1|2019-05-12|2020-05-12|[car_loc, office |
| 1|2019-05-12|2020-05-12|[car_num, gh7890 |
我需要转换数据框以了解情况:
+---------------------+---+--------+-------+-------+
| start | end | id|car_type|car_loc|car_num|
+---------------------+---+--------+-------+-------+
|2019-05-12|2020-05-12| 1|fiat |home |xd7890 |
|2019-05-13|2020-05-13| 2|fiat |home |ae1234 |
|2019-05-12|2020-05-12| 1|ford |office |gh7890 |
解决方案
推荐阅读
- kubernetes - Kubernetes ingress-nginx LoadBalancer 指向云桶
- python - 一种无需重写即可更新 csv 文件的方法
- java - 如何创建一个返回包含另一个数组重复值的新数组的函数
- python - 如何使用 python sqlite 输出数据?
- javascript - 如何创建带有音频 blob 的音频文件?
- data-structures - 键范围大小 < 10,哈希函数的每个数字 ∈ [0, 3]
- r - 如何在 R 中应用 Cochran-Armitage 趋势检验
- c++ - 如何避免 Process2 一直等待 Process1 释放 named_mutex 的情况
- c# - 我的程序太长了。我想使用循环方法缩短它
- python - 基础强化学习中的折扣奖励