我有一个pyspark Dataframe ,看起来像这样(不能假设数据总是按照显示的顺序。此外,服务的总数也是无限的,而在下面的示例中仅显示了2个):
| service | usage | count |
|---------|-------|-------|
| a | low | 5 |
| a | high | 3 |
| b | high | 3 |
| b | low | 2 |
字符串
我想创建一个新的dataframe,其中每行都有字符串格式的服务使用计数。举例来说:
| service | info |
|---------|------------------|
| a |{low: 5, high: 3} |
| b |{low: 2, high: 3} |
型
这是我尝试的:
# data is originally in dataframe called df:
new_df = df.groupBy('service').agg(F.collect_list('count').alias('info'))
型
但是上面的输出是这样的:
| service | info |
|---------|------------------|
| a | [5,3] |
| b | [3,2] |
型
这里的问题是,info
列中的数字顺序并没有告诉我哪个数字对应于high
,哪个对应于low
的用法。也没有标签。
2条答案
按热度按时间jyztefdp1#
这里的解决方案需要提前知道
usage
中的类别。这里的想法是使用pivot
获取low
/high
列,然后将其转换为结构体,然后可以将其转换为JSON字符串。我们从这个数据框开始
个字符
由于您没有在问题中指定,因此我假设一个一般情况,即
(service, usage)
不是唯一的(参见a
),并且如果给定“服务”的“使用”不完整(参见c
)。解决方案:
型
部分备注:
.show()
,它看起来像这样:型
.show()
,那么它看起来像这样(你所追求的结果):型
svmlkihl2#
字符串