c 解析json Spark處理損壞json檔案

2021-10-13 16:24:56 字數 1495 閱讀 6725

通常用spark讀取json檔案的時候,用的是

spark.read.json(path)
這種方式進行讀取,但是,當json檔案某一行有損壞的情況下,則會出現解析失敗,導致schema解析錯誤的情況,可能會遇到這種錯誤

found duplicate column(s) in the data schema

spark.read.option("mode","dropmalformed")
但是在我的資料下並沒有用。

然後我想出2個解決方案。

第乙個是用fastjson,來逐行解析,丟掉解析失敗的行。

第二個是用spark中指定schema的方式來解析。

最終我採取了第二種方式。

具體如下,我只將**重要部分提取,其他業務部分省略:

import org.apache.spark.sql.types._

val schema_1 = structtype(

list(

structfield("field_a", longtype),

structfield("field_b", longtype),

structfield("field_c", longtype),

structfield("field_d", arraytype(stringtype))))

val schema_2 = structtype(

list(

structfield("field_e", longtype),

structfield("field_f", longtype),

structfield("field_g", longtype),

structfield("field_h", arraytype(stringtype))))

val schema = structtype(

list(

structfield("schema_1", schema_1),

structfield("schema_2", schema_2)))

val df = spark.read.schema(schema).json(path)

這種方式有優點,也有缺點:

優點是,若不加schema,則spark.read.json方式則需要掃2遍所有json檔案,第一遍掃schema,第二遍解析。加入schema,則只需要掃一遍,第一遍掃schema跳過。

缺點是,增加了維護成本,若加入了一些字段,則這裡則需要同步修改。

如有遇到同樣問題的朋友們,有新的解決方案,歡迎交流。

c 解析json字串處理

完整 在文末,引用庫檔案後可直接執行 需求 假設有如下json字串 manager 請利用c 處理這個字串,在控制台顯示出公司的id,第一位員工的姓,和所有管理者的工資。解決步驟 為了更清晰的說明,本例在控制台中測試,本人程式設計環境vs2015 2 在vs中新建專案 控制台應用程式。4 在主程式p...

c 解析json字串處理

自 為了防止帖子丟失所以我又複製了一下 需求 假設有如下json字串 manager 請利用c 處理這個字串,在控制台顯示出公司的id,第一位員工的姓,和所有管理者的工資。解決步驟 為了更清晰的說明,本例在控制台中測試,本人程式設計環境vs2015 2 在vs中新建專案 控制台應用程式。4 在主程式...

Oracle回滾段表空間檔案丟損地處理

資料庫是啟動著的 如果你檢測到丟失或損壞了回滾段表空間的資料檔案,並且資料庫是執行著的,不要把它 down 掉。在很多情況下,資料庫是啟著的比關閉著解決問題更容易些。這種情況的兩種可能的解決方法 a 使丟失的那個資料檔案 offline,並從備份中恢復它,這種情況適用於資料庫是處於歸檔方式的。b 另...