我有大量从第 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\": ...
这显然对我不利,我看到了两种处理方法:
- 以某种方式将文件预处理为纯文本并删除 [] 个字符?
- 使用 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/