2015-12-22 57 views
0

加載依賴於輸入JSON文件格式的JSON時遇到問題。爲SQLContext格式化JSON文件

根據JSON數據集上的Spark文檔,輸入文件上的每一行必須是有效的JSON對象。回覆:

「請注意,作爲json文件提供的文件不是典型的JSON文件,每行必須包含一個單獨的,自包含的有效JSON對象,因此,常規的多行JSON文件往往會失敗。「

所以,如果我有一個輸入JSON文件如:

{ 
"Year": "2013", 
"First Name": "DAVID", 
"County": "KINGS", 
"Sex": "M", 
"Count": "272" 
}, 
{ 
"Year": "2013", 
"First Name": "JAYDEN", 
"County": "KINGS", 
"Sex": "M", 
"Count": "268" 
} 

是否有任何現有的工具或腳本轉換爲:

{"Year": "2013","First Name": "DAVID","County": "KINGS","Sex": "M","Count":"272"}, 
{"Year": "2013","First Name": "JAYDEN","County": "KINGS","Sex": "M","Count": "268"} 

在JSON符合「每一行必須包含一個獨立的,自包含的有效JSON對象「

如果我將格式設置爲上面的這種樣式,事情按預期工作。但是,我通過幾行手動完成了這些mod。我無法爲整個數據集執行此操作,因此查找現有的腳本或工具。

OR

我可以加載到JDBC可用的數據庫,如果這是一個更好的選擇。思考?

在此先感謝

回答

3

您可以將JSON文件簡單地加載到RDD首先使用sc.wholeTextFiles()和刪除文件的名稱列,然後運行閱讀有關RDD內容SQLContext

例如

val jsonRdd = sc.wholeTextFiles("samplefile.json").map(x => x._2) 
val jsonDf = sqlContext.read.json(jsonRdd) 
+0

很好,謝謝 –

+0

我應該提到,你可以在多個文件中運行它,通過將一個通配符傳遞給wholeTextFiles,其餘的應該按原樣運行。 –

-1

如果通過添加方括號使其成爲數組,則該怎麼辦?喜歡這個;

[ 
    { 
    "Year": "2013", 
    "FName": "DAVID", 
    "County": "KINGS", 
    "Sex": "M", 
    "Count": "272" 
    }, 
    { 
    "Year": "2013", 
    "FName": "JAYDEN", 
    "County": "KINGS", 
    "Sex": "M", 
    "Count": "268" 
    } 
    ] 

如果我把你的文件,並通過它與Node.js的輸出加我可以遍歷括號,看起來像你想要的文件。 Node.js中的警告是我不能有變量名字 - 我必須將其更改爲FName。

+0

這與節點無關。 Apache Spark有多行JSON的問題,OP想知道如何解決這個問題,並確保Spark接受有效的多行JSON –