我有一個非常大的.tsv
文件,有一個有些奇怪的結構,使其具有行是這樣的:轉換任何以JSON在飛行
CA 11[{"id":"missing_required_gtin_future_disapproval","location":"gtin","severity":"critical","timestamp":"2017-02-19T20:57:36Z"}, {"id":"missing_required_gtin_error","location":"gtin","severity":"critical","timestamp":"2017-02-19T20:57:36Z"}]]
所以,你可以看到,這4列,但第4一個是json對象。
我可以將文件加載到DF的火花:
val df = sqlContext.read.format("com.databricks.spark.csv")
.option("delimiter", "\t")
.load(file_path)
但這:
df.take(1)(0)(3)
產量:
res53: Any = [{"id":"missing_required_gtin_future_disapproval","location":"gtin","severity":"critical","timestamp":"2017-02-19T20:54:43Z"}, {"id":"missing_required_gtin_error","location":"gtin","severity":"critical","timestamp":"2017-02-19T20:54:43Z"}]
這使得它(對我來說)困難解析爲json對象。
理想情況下,我想有一個數據框,其中列有他們的JSON對象的鍵:
"id" "location" "severity" "timestamp"
123 blabla critical 2017-02-19T20:54:43Z
234 blabla critical 2017-02-19T21:54:43Z
所以困難是雙重的。
- 對於原始文件上的每一行,由於每個json對象都是一個列表,因此我可能在最後一個數據幀上有幾行。
- 如何處理json對象?
編輯:
我意識到我是沒有什麼其實我是想很清楚。 我會其實喜歡的是能夠訪問,以及前三欄,以便最終DF看起來是這樣的:
"country " "user" "object" "id" "location" "severity" "timestamp"
CA 98172937 87647563 123 blabla critical 2017-02-19T20:54:43Z
CA 98172937 87647563 234 blabla critical 2017-02-19T21:54:43Z
這是最困難的部分,我相信,因爲它涉及到在某種程度上將關於json對象前3列的信息。
你的「JSON」是字符串類型,而不是任何但是take方法把它無需推斷類型。用df.printSchema檢查你的數據模式 – eliasah