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

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

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

  1. {"contract":
  2. {"contractcode":"CCC",
  3. unit:
  4. {"value":"LOCAL",
  5. desc:"LOCAL"},
  6. segmentlist:
  7. {"segment":[ #"segment" is array of struct here
  8. {"transaction":"1",
  9. "plans":
  10. {"identifier":[ #"identifier" is array of struct here
  11. {"value":"123","desc":"L1"},
  12. {"value":"456","desc":"L2"}]
  13. }
  14. }]
  15. }
  16. },
  17. plans:
  18. {"listplans":[ #"listplans" is array of struct here
  19. {"plantype":"M",
  20. plandesign:
  21. {"value":"PV","desc":"PD"},
  22. state:
  23. {"value":"ST","desc":"ST"}
  24. }]
  25. }
  26. }
r55awzrz

r55awzrz1#

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

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

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

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

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

相关问题