gpt4 book ai didi

json - 在 spark 中处理 JSON - 不同文件中的不同模式

转载 作者:行者123 更新时间:2023-12-05 07:28:58 25 4
gpt4 key购买 nike

我有大量从第 3 方获得的 JSON 文件。它们都具有相同的模式,除了当嵌套元素为空时,它表示为空数组。

第一个例子

{
....
"survey_data":
{
"2": { "question":"....", "answer_id":"....", .... },
"3": { "question":"....", "answer_id":"....", .... },
}
}

所以这是一个有效的 JSON,“survey_data”元素是一个 struct_type,但具有相当复杂的嵌套结构(具有比这个简化示例中更多的子元素)

但是,当 survey_data 没有嵌套元素时,它表示为空数组:

{
....
"survey_data": []
}

这显然在原理上不兼容,但我无法影响这一点,因为数据来自第 3 方。

当我想将这些 JSON 文件作为单个数据帧加载到 spark 中时,spark 将 survey_data 类型推断为字符串,并转义所有字符:

"survey_data":"{\"2\":{\"question\": ...

这显然对我不利,我看到了两种处理方法:

  1. 以某种方式将文件预处理为纯文本并删除 [] 个字符?
  2. 使用 spark 删除数组字符,或告诉 spark 该列应该是结构类型?

谁能给我提示这个问题的解决方案?

最佳答案

我认为这应该可行,很久以前就做过。

如果您有一个 JSON 文件,您对它的模式感到满意,最好是一个小的,您可以使用它的模式来读取所有其他 JSON 文件:

val jsonWithSchema = spark.read.json("PATH_TO_JSON_WITH_RIGHT_SCHEMA")
val df = spark.read.schema(jsonWithSchema.schema).json("PATH_TO_DATAFILES")

关于json - 在 spark 中处理 JSON - 不同文件中的不同模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53083788/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com