使用pyspark展平Hive结构列或Avro文件

时间:2018-11-19 04:52:22

标签: hive pyspark avro pyspark-sql

我有一个Hive表,该表具有struct数据类型列(下面的示例)。该表是在avro文件上创建的。

通过使用pyspark,我该如何展平记录,以便获得每一列中的简单数据类型值(而不是struct,array或list)以加载另一个Hive表。

我可以使用Hive表或avro文件作为源。

样本数据-

配置单元列名称:Contract_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"}  
            }]      
    }               
}

1 个答案:

答案 0 :(得分:1)

您可以首先将HIVE表读取为Spark Dataframe,如下所示。

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

然后,您可以通过Spark的Dataframe API explode函数来扁平化结构。 PFB示例代码应该起作用。

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

如果在上面的示例数据中可以看到嵌套的结构,则可以多次应用explode

希望有帮助。

此致

Neeraj