2017-01-24 52 views
3

下面是我的數據文件的採樣串:斯卡拉 - 每個JSON行轉換爲表

{"externalUserId":"f850bgv8-c638-4ab2-a68a d79375fa2091","externalUserPw":null,"ipaddr":null,"eventId":0,"userId":1713703316,"applicationId":489167,"eventType":201,"eventData":"{\"apps\":[\"com.happyadda.jalebi\"],\"appType\":2}","device":null,"version":"3.0.0-b1","bundleId":null,"appPlatform":null,"eventDate":"2017-01-22T13:46:30+05:30"}` 

我有上百萬這樣的行,如果整個文件是一個JSON我可以使用JSON讀者卻怎麼的我在一個文件中處理多個json行並將它們轉換爲表。

我怎麼能將此數據轉換爲SQL表列:

|externalUserId |externalUserPw|ipaddr| eventId |userId |....... 
|---------------|--------------|------|----------|----------|....... 
|f850bgv8-..... |null   |null |0   |1713703316|....... 
+0

到目前爲止您嘗試過的是什麼?哪個在工作或不工作? –

+0

它是可能的..我需要更多的數據,如 文件中兩個json行之間的分隔符是什麼? 文件的格式是什麼? –

+0

每行由換行符「\ n」分隔,文件格式爲txt文件 – toofrellik

回答

2

可以使用火花內置read.json功能。對於你的情況,這似乎很棒,每行包含一個JSON。

作爲一個例子,以下代碼創建根據JSON文件的內容的數據幀:

val df = spark.read.json("examples/src/main/resources/people.json") 

// Displays the content of the DataFrame to stdout 
df.show() 

更多信息:http://spark.apache.org/docs/2.1.0/sql-programming-guide.html#data-sources

火花SQL可自動推斷JSON數據集和負載的模式它作爲數據集[Row]。此轉換可以使用SparkSession.read.json()在字符串的RDD,或JSON文件上完成。

請注意,作爲json文件提供的文件不是典型的JSON文件。 每行必須包含一個單獨的,獨立的有效JSON對象。有關更多信息,請參閱JSON行文本格式,也稱爲換行符分隔的JSON。因此,常規的多行JSON文件通常會失敗。