当前位置: 首页 > 知识库问答 >
问题:

解析来自 Pyspark Dataframe 的 JSON 字符串

百里成仁
2023-03-14

我有一个嵌套的JSON语句,我需要将其转换为触发数据框。这个JSON语句存在于数据框列中。我一直在尝试使用“from_json”和“get_json_object”解析数据框列中的语句,但无法读取数据。这是我一直试图阅读的源数据的最小片段:

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

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

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:从字符串类型列中读取嵌套JSON并创建列

还试图将它写入JSON文件并读取它。它也不工作:在pyspark中读取嵌套的JSON文件

共有1个答案

上官鸿朗
2023-03-14

空字符\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]|
+-----------------------+------------------+------+
 类似资料:
  • 问题内容: 我有以下Json字符串 我正在尝试解析它并打印出每个名称和值-最简单的方法是什么?我尝试了jQuery.parseJSON但我不知道如何使用它 示例代码会很棒 问题答案: 结果是: jsFiddle示例:http://jsfiddle.net/bradchristie/XtzjZ/1/

  • 问题内容: 我正在尝试解析用PHP编码并通过TCP发送到C ++客户端的JSON字符串。 我的JSON字符串如下所示: 在C ++客户端上,我正在使用jsoncpp库: 问题是我没有得到任何输出,甚至没有关于解析的错误(如果有)。你能帮我了解我做错了什么吗? 问题答案: 您的问题是:没有 root [“ name”] 。您的文档应如下所示: 和你的代码是这样的: 如果您想按原样保留数据: 使用迭代

  • 问题内容: 我正在尝试解析java中的JSON字符串,以单独打印各个值。但是,在使程序运行时,出现以下错误- 我的班级看起来像- 让我知道我丢失了什么,或者为什么每次运行该应用程序时都会得到该错误。任何意见,将不胜感激。 问题答案: 看我的评论。当以 android.jar身份运行时,您需要包含完整的org.json库。仅包含要针对其进行编译的存根。 __ 此外,您还必须在JSON数据中删除额外的

  • 问题内容: 我有一个带有unicode字符的json文件,但我无法解析它。我已经在Flash CS5(JSON库)中进行了尝试,并且在http://json.parser.online.fr/中进行了尝试,但我始终会收到“意外令牌- 评估失败” 抱歉,语法确实存在问题,它是通过客户端发送的。 有人可以帮帮我吗?谢谢 问题答案: RFC: JSON文本应以Unicode编码。默认编码为UTF-8。

  • 问题内容: 如何在Android中解析Json字符串数组并将其保存在Java字符串数组中(例如:xy [])? 我要解析的Json: 稍后在我的代码中,我想用该数组填充布局中的微调项。我尝试过的所有内容都只包含微调框中列出的一个街头商品。 问题答案: 解析 一旦解析并将其添加到数组。使用相同的控件来填充微调框。 表示json数组节点 表示json对象节点