簡體   English   中英

在Spark中處理JSON-不同文件中的不同架構

[英]Processing JSON in spark - different schemas in different files

我有很多從第三方獲得的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\": ...

顯然這對我不利,我看到了兩種解決方法:

  1. 以某種方式將文件預處理為純文本並刪除[]字符?
  2. 使用spark刪除數組字符,或告訴spark該列應為struct類型?

有人能向我提出解決此問題的方法嗎?

我認為這應該工作,很久以前就做到了。

如果您有一個滿意的帶有模式的JSON文件,最好是一個很小的文件,則可以使用其模式讀取所有其他JSON文件:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM