【问题标题】:Joining two data frames A & B and converting non key columns from Data frame B to Json string连接两个数据框 A 和 B 并将非关键列从数据框 B 转换为 Json 字符串
【发布时间】:2021-06-15 04:54:32
【问题描述】:

我有如下两个DataFrame,

数据帧 A:

DEPT_ID DEPT_NAME
10      Finance
20      Marketing

数据帧 B:

EMP_ID DEPT_ID EMP_NAME EMP_SALARY
101    10      AAAA     1000
102    20      BBBB     2000
103    10      CCCC     1500
104    20      DDDD     3000

预期结果:在 Pyspark 中,我需要在 DEPT_ID 上加入数据框 A 和 B,并将数据框 B 中的非关键列转换为_json 字符串并将其存储在数据框 C 中的 Json_Data 列中

数据帧 C:

DEPT_ID DEPT_NAME Json_Data
10      Finance   [{"_status": "normal","EmpDetails":{"EMP_ID":"101","EMP_NAME":"AAAA","EMP_SALARY":"1000"},{"EMP_ID":"103","EMP_NAME":"CCCC","EMP_SALARY":"1500" }]
20      Marketing [{"_status": "normal","EmpDetails":{"EMP_ID":"102","EMP_NAME":"BBBB","EMP_SALARY":"2000"},{"EMP_ID":"104","EMP_NAME":"DDDD","EMP_SALARY":"3000" }]

【问题讨论】:

    标签: apache-spark pyspark apache-spark-sql


    【解决方案1】:

    您可以通过DEPT_IDDEPT_NAME 加入和分组,将员工详细信息列表收集到结构中。并使用to_json 获取json字符串:

    from pyspark.sql import functions as F
    
    df_c = df_a.join(df_b, ["DEPT_ID"]).groupBy("DEPT_ID", "DEPT_NAME").agg(
        F.to_json(
            F.struct(
                F.lit("normal").alias("_status"),
                F.collect_list(
                    F.struct(
                        F.col("EMP_ID"),
                        F.col("EMP_NAME"),
                        F.col("EMP_SALARY")
                    )
                ).alias("EmpDetails")
            )
        ).alias("Json_Data")
    )
    
    df_c.show(truncate=False)
    #+-------+---------+-----------------------------------------------------------------------------------------------------------------------------------------+
    #|DEPT_ID|DEPT_NAME|Json_Data                                                                                                                                |
    #+-------+---------+-----------------------------------------------------------------------------------------------------------------------------------------+
    #|10     |Finance  |{"_status":"normal","EmpDetails":[{"EMP_ID":101,"EMP_NAME":"AAAA","EMP_SALARY":1000},{"EMP_ID":103,"EMP_NAME":"CCCC","EMP_SALARY":1500}]}|
    #|20     |Marketing|{"_status":"normal","EmpDetails":[{"EMP_ID":102,"EMP_NAME":"BBBB","EMP_SALARY":2000},{"EMP_ID":104,"EMP_NAME":"DDDD","EMP_SALARY":3000}]}|
    #+-------+---------+-----------------------------------------------------------------------------------------------------------------------------------------+
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 2017-06-03
      相关资源
      最近更新 更多