如何将复杂的 json 结构转换为数据框或 parquet 文件

问题描述 投票:0回答:1

我需要帮助。 我有下一个 json 示例

json_sample

我需要使用 pyspark 将 json 输入转换为数据帧,以便稍后保存到 parquet 文件中。 我尝试:

json_path = 's3://df-julio-poc/source/my_test.json'

df0 = spark.read.option("multiline", "true").option("encoding", "UTF-8").json(json_path)
df0.count()

df = spark.read.json(json_path)
df.printSchema()
df.show()

结果一定是这样的:

enter image description here

以这种方式创建此数据框的最佳方法是什么?

问候

dataframe apache-spark pyspark aws-glue
1个回答
0
投票

实现结果的一种方法是使用

pyspark.sql.functions.explode

您可以分解数据字段并轻松导航到每个部分。访问 id、Name、owner、card_temp 的示例,您可以执行如下操作

    val df0 = spark.read.option("multiline", "true").option("encoding", "UTF-8").json("C:\\Users\\\Downloads\\my_test.json")

    df0.printSchema()

    val lowcaseDF = df0
      .withColumn("data_elements", explode(col("data")))
      .withColumn("card_elements", explode(col("data_elements.card")))
      .select(col("data_elements.name"),col("data_elements.id"),col("data_elements.owner"),col("card_elements.temp"))

    lowcaseDF.show() 

上面是 scala Spark 代码,但您也可以在 pyspark 中执行此操作并得到以下结果。

+--------------------+-------+-------+--------+
|                name|     id|  owner|    temp|
+--------------------+-------+-------+--------+
|               email|1384323|1019693|texto 23|
|               email|1384323|1019693|texto 32|
|               email|1384323|1019693|texto 43|
|      email_template|1384501|1019693| texto 3|
|      email_template|1384501|1019693| texto 2|
|email_template_qc__c|1384531|1019693| texto 1|
|email_template_qc__c|1384531|1019693| texto 2|
+--------------------+-------+-------+--------+

同样,对于您可以导航的所有嵌套字段。

© www.soinside.com 2019 - 2024. All rights reserved.