从Pyspark数据帧解析JSON字符串

2024-10-04 01:37:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个嵌套的JSON dict,需要转换为spark dataframe。此JSON dict存在于dataframe列中。我一直在尝试使用“from_json”和“get_json_object”解析dataframe列中的dict,但无法读取数据。以下是我一直试图读取的源数据的最小片段:

{"value": "\u0000\u0000\u0000\u0000/{\"context\":\"data\"}"}

我需要提取嵌套的dict值。我使用下面的代码清理数据并将其读入数据帧

from pyspark.sql.functions import *
from pyspark.sql.types import *
input_path = '/FileStore/tables/enrl/context2.json      #path for the above file
schema1 = StructType([StructField("context",StringType(),True)]) #Schema I'm providing
raw_df = spark.read.json(input_path)
cleansed_df = raw_df.withColumn("cleansed_value",regexp_replace(raw_df.value,'/','')).select('cleansed_value') #Removed extra '/' in the data

cleansed_df.select(from_json('cleansed_value',schema=schema1)).show(1, truncate=False)

每次运行上述代码时,我都会得到一个空数据帧。请帮忙

尝试了以下内容,但无效: PySpark: Read nested JSON from a String Type Column and create columns

还尝试将其写入JSON文件并读取。它也不起作用: reading a nested JSON file in pyspark


Tags: 数据pathfromjsondataframedfrawvalue
1条回答
网友
1楼 · 发布于 2024-10-04 01:37:41

空字符\u0000会影响JSON的解析。您也可以替换它们:

df = spark.read.json('path')

df2 = df.withColumn(
    'cleansed_value', 
    F.regexp_replace('value','[\u0000/]','')
).withColumn(
    'parsed', 
    F.from_json('cleansed_value','context string')
)

df2.show(20,0)
+           -+         +   +
|value                  |cleansed_value    |parsed|
+           -+         +   +
|/{"context":"data"}|{"context":"data"}|[data]|
+           -+         +   +

相关问题 更多 >