我需要帮助。 我有下一个 json 示例
我需要使用 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()
结果一定是这样的:
以这种方式创建此数据框的最佳方法是什么?
问候
实现结果的一种方法是使用
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|
+--------------------+-------+-------+--------+
同样,对于您可以导航的所有嵌套字段。