微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PySpark - 向字典添加复合键名称

如何解决PySpark - 向字典添加复合键名称

这是我的第一篇文章,如果有任何错误,请告诉我。

这是数据帧 df:列 'a' 是一个字符串,其余的是浮点数。

我为数据框添加一个图像,因为当我手动添加数据时,格式会变得混乱。

Dataframe

在给定的数据帧 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'
       },}
    

Output

解决方法

分组时使用pivot

df_cache = df.groupBy().pivot('a').agg(*req_cols).cache()

列名将与您想要的输出不同,因此您需要根据需要更改它们

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?