如何解决PySpark - 向字典添加复合键名称
这是数据帧 df:列 'a' 是一个字符串,其余的是浮点数。
我为数据框添加了一个图像,因为当我手动添加数据时,格式会变得混乱。
在给定的数据帧 df 上,我想对列 'a' 进行分组并找到每个其他列的最小值和最大值。我想将输出作为字典。因此,我将生成的 pyspark 数据帧转换为 JSON 并使用 json。加载转换为字典。
Code snippet:
import pyspark.sql.functions as F
cols=['b','c']
req_cols=[F.struct(F.first('a').alias('a'),F.max(col).alias('max'),F.min(col).lias('min')).alias(col) for col in cols]
df_cache=df.groupby('a').agg(*req_cols).cache()
dict=json.loads(df_cache.toJSON.collect()[0])
我的输出:
{
"b": {
"max":
"min":
"a":'10'
},"c": {
"max":
"min":
"a":'10'
},}
所需输出:
{
"b_10": {
"max":
"min":
"a":'10'
},"c_10": {
"max":
"min":
"a":'10'
},"b_20": {
"max":
"min":
"a":'20'
},"c_20": {
"max":
"min":
"a":'20'
},"b_30": {
"max":
"min":
"a":'30'
},"c_30": {
"max":
"min":
"a":'30'
},}
解决方法
分组时使用pivot
df_cache = df.groupBy().pivot('a').agg(*req_cols).cache()
列名将与您想要的输出不同,因此您需要根据需要更改它们
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。