PySpark 问题用嵌套 JSON 和其他元素展平数组
PySpark problem flattening array with nested JSON and other elements
我正在努力使用正确的语法来展平一些数据。
我有一个 dlt
table 和一个列(为了示例而命名为 lorem
),其中每一行如下所示:
[{"field1": {"field1_1": null, "field1_2": null}, "field2": "blabla", "field3": 13209914, "field4": {"field4_1": null, "field4_2": null}, "field5": 4}, ...]
我希望我的输出基于第一个创建一个新的 table,它基本上为我上面共享的数组中的每个元素创建一行。
Table 应该是这样的:
|field1_1|field1_2|field2|field3|field4_1|field4_2|field_5|
|:--------|:--------|:-----|:-----|:--------|:------ |:------|
|null|null|blabla|13209914|null|null|4|
然而,当我像这样爆炸时:select(explode("lorem"))
我没有得到想要的输出,相反,我只得到字段 0 和爆炸以及除 field4 内的所有内容之外的其他字段。
我的问题是,我应该用什么其他方式来展平这些数据?
如果需要,我可以提供更清晰的示例。
使用 withColumn
添加您需要的其他列。一个简单的例子:
%%pyspark
from pyspark.sql.functions import col
df = spark.read.json("abfss://somelake@somestorage.dfs.core.windows.net/raw/flattenJson.json")
df2 = df \
.withColumn("field4_1", col("field4.field4_1")) \
.withColumn("field4_2", col("field4.field4_2"))
df2.show()
我的结果:
我正在努力使用正确的语法来展平一些数据。
我有一个 dlt
table 和一个列(为了示例而命名为 lorem
),其中每一行如下所示:
[{"field1": {"field1_1": null, "field1_2": null}, "field2": "blabla", "field3": 13209914, "field4": {"field4_1": null, "field4_2": null}, "field5": 4}, ...]
我希望我的输出基于第一个创建一个新的 table,它基本上为我上面共享的数组中的每个元素创建一行。
Table 应该是这样的: |field1_1|field1_2|field2|field3|field4_1|field4_2|field_5| |:--------|:--------|:-----|:-----|:--------|:------ |:------| |null|null|blabla|13209914|null|null|4|
然而,当我像这样爆炸时:select(explode("lorem"))
我没有得到想要的输出,相反,我只得到字段 0 和爆炸以及除 field4 内的所有内容之外的其他字段。
我的问题是,我应该用什么其他方式来展平这些数据? 如果需要,我可以提供更清晰的示例。
使用 withColumn
添加您需要的其他列。一个简单的例子:
%%pyspark
from pyspark.sql.functions import col
df = spark.read.json("abfss://somelake@somestorage.dfs.core.windows.net/raw/flattenJson.json")
df2 = df \
.withColumn("field4_1", col("field4.field4_1")) \
.withColumn("field4_2", col("field4.field4_2"))
df2.show()
我的结果: