我在pyspark结构化流中接收流数据,我需要对其进行透视,以便可以从该数据中获得一行。
进入集群的数据结构是:
{
"version": 1.0.0,
"message": {
"data": [{
"name": "name_1",
"value": 1.0},
...
{
"name": "name_2",
"value": 2.0}]
}
}
我的代码如下:
dfStreaming = spark \
.readStream \
.format("eventhubs") \
.options(**optionConf()) \
.load() \
.select(explode("message.data").alias("data")) \
.select(("data.*")) \
我得到以下结果数据框:
|---------------------|------------------|
| Name | Value |
|---------------------|------------------|
| Name_1 | 1.0 |
|---------------------|------------------|
| Name_2 | 2.0 |
|---------------------|------------------|
但是我需要以下结构(实际上是表的枢轴):
|---------------------|------------------|
| Name_1 | Name_2 |
|---------------------|------------------|
| 1.0 | 2.0 |
|---------------------|------------------|
不允许以流数据帧为中心,但是我想应该有一个解决方案。
非常感谢您的帮助。
答案 0 :(得分:0)
解决方案是在重新创建数据帧的行时添加一些聚合。
dfStreaming = spark \
.readStream \
.format("eventhubs") \
.options(**optionConf()) \
.load() \
.select(explode("message.data").alias("data")) \
.select(("data.*")) \
.selectexpr(["sum(case when Name=Name_of_desired_column then Value else null) as Name_of_desired_column"])