PySpark - 将复合键名称添加到字典

PySpark - Add a composite key name to the Dictionary

这是我的第一个post.

如果有任何错误请多多包涵

这是数据框 df:列 'a' 是字符串,其余是浮点数。

我已经为数据框添加了一张图像,因为当我手动添加数据时,格式不知何故变得混乱。

Dataframe

在给定的 dataFrame df 上,我想按列分组 'a' 并找到彼此的最小值和最大值 column.I 想要得到输出 dictionary.So,我转换了将生成的 pyspark 数据帧转换为 JSON 并使用 json.loads 转换为 Dictionary.

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

分组时使用主元

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

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