我有一个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"}
}]
}
}
答案 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