我有很多从第三方获得的JSON文件。它们都具有相同的架构,除了当嵌套元素为空时,它表示为空数组。
第一个例子
{
....
"survey_data":
{
"2": { "question":"....", "answer_id":"....", .... },
"3": { "question":"....", "answer_id":"....", .... },
}
}
这是一个有效的JSON,“ survey_data”元素是struct_type,但是具有非常复杂的嵌套结构(比此简化示例中的子元素更多)
但是,当survey_data没有嵌套元素时,它将表示为空数组:
{
....
"survey_data": []
}
这显然在原理上是不兼容的,但是由于数据来自第三方,所以我不能影响这一点。
当我想将这些JSON文件作为单个数据帧加载到spark中时,spark会推断Survey_data类型为字符串,并转义所有字符:
"survey_data":"{\"2\":{\"question\": ...
这显然对我不利,我看到了两种解决方法:
有人能提示我解决此问题的方法吗?
答案 0 :(得分:0)
我认为这应该可行,很久以前就做到了。
如果您有一个满意的带有模式的JSON文件,最好是一个很小的文件,则可以使用其模式读取所有其他JSON文件:
val jsonWithSchema = spark.read.json("PATH_TO_JSON_WITH_RIGHT_SCHEMA")
val df = spark.read.schema(jsonWithSchema.schema).json("PATH_TO_DATAFILES")