使用pyspark展平配置单元结构列或avro文件

pdsfdshx  于 2021-06-27  发布在  Hive
关注(0)|答案(1)|浏览(411)

我有一个配置单元表,它有一个struct data type列(下面的示例)。该表是在avro文件上创建的。
通过使用pyspark,如何展平记录,以便在每个列中获得简单的数据类型值(不是struct、array或list)来加载另一个配置单元表。
我可以使用配置单元表或avro文件作为源。
样本数据-
配置单元列名:contract\u data

{"contract":                    
    {"contractcode":"CCC",              
    unit:               
        {"value":"LOCAL",           
        desc:"LOCAL"},          
    segmentlist:                
        {"segment":[            #"segment" is array of struct here
            {"transaction":"1",     
            "plans":        
                {"identifier":[     #"identifier" is array of struct here
                    {"value":"123","desc":"L1"},
                    {"value":"456","desc":"L2"}]
                }   
            }]      
        }           
    },              
plans:                  
    {"listplans":[              #"listplans" is array of struct here
        {"plantype":"M",            
        plandesign:         
            {"value":"PV","desc":"PD"},     
            state:      
                {"value":"ST","desc":"ST"}  
            }]      
    }               
}
r55awzrz

r55awzrz1#

您可以首先将配置单元表读取为spark dataframe,如下所示。

df = spark.table("<DB_NAME>.<Table_Name>")

然后,您可以从spark的dataframeapi中分解函数来展平结构。pfb的样本代码应该工作。

from pyspark.sql.functions import *
df.select(explode("Contract_Data"))

如果结构是嵌套的,我可以在上面的示例数据中看到,您可以应用 explode 多次。
希望有帮助。
当做,
尼拉吉

相关问题