取消
顯示的結果
而不是尋找
你的意思是:

BufferHolder超過Json壓扁

D3nnisd
新的貢獻者三世

在磚上,我們用下麵的代碼來平JSON在Python中。REST API的數據:

' ' '

df = spark.read.format (json)。選項(“頭”,“真正的”)。選項(“多行”,“真正的”)。負載(SourceFileFolder + sourcetable + * . json)

df2 = df.select (psf.explode(“價值”).alias (tmp)) .select (tmp . *)

df2.write.format(“δ”).save (DeltaLakeFolder)

' ' '

我們不知道他們的模式是改變盡可能通用。然而,隨著增長高於2.8 gb的json文件,我現在看到以下錯誤:

' ' '

引起的:. lang。IllegalArgumentException:不能長BufferHolder按大小168後因為規模增長超過大小限製2147483632

' ' '

json是這樣的:

' ' '

{

“@odata。上下文”:“RANDOMSTRING)”,

“價值”:(

{

“COL1”:空,

:“COL2 VAL2”,

:“COL3 VAL3”,

:“COL4 VAL4”,

:“COL5 VAL5”,

:“COL6 VAL6”,

:“COL8 VAL7”,

“COL9”: null

},

{

“COL1”:空,

:“COL2 VAL2”,

:“COL3 VAL3”,

:“COL4 VAL4”,

:“COL5 VAL5”,

:“COL6 VAL6”,

:“COL8 VAL7”,

“COL9”: null

},

{

“COL1”:空,

:“COL2 VAL2”,

:“COL3 VAL3”,

:“COL4 VAL4”,

:“COL5 VAL5”,

:“COL6 VAL6”,

:“COL8 VAL7”,

“COL9”: null

}

]

}

' ' '

我如何解決這個問題或者解決這個?

提前謝謝!

親切的問候,

丹尼斯

15日回複15

Dan_Z
尊敬的貢獻者

嗯,你可以這樣做使用UDF。這將迫使閱讀和爆炸發生在一個節點上。但使用UDF將要求你知道輸出模式。我認為最好的辦法是建立某種輸入JSON解析器。像SAX。我以前沒有做過。

D3nnisd
新的貢獻者三世

我知道輸出的模式,但有大量的文件,所以我想避免為每個人創造模式的。你能提供給我一個小示例基於模式在我原來的文章?我不熟悉UDF。

Dan_Z
尊敬的貢獻者

例如:

從pyspark。sql從pyspark.sql進口行。(文件類型*文件導入=[行= " / dbfs / tmp / comm_q_json.json ")] df =火花。createDataFrame(文件(文件:String)) def read_process_json(迭代器):大熊貓作為pd def process_from_path導入(路徑):rawJSON = pd.io.json.read_json(路徑)返回pd.json_normalize (rawJSON(“價值”))在迭代器:pdf DFseries = pdf(“文件”)蘋果(process_from_path) .tolist()收益率pd.concat (DFseries) outSchema = StructType ([StructField (“COL1 StringType(),真的),StructField (“COL2 StringType(),真的),StructField (COL3, StringType(),真的),StructField (“COL4 StringType(),真的),StructField (“COL5 StringType(),真的),StructField (“COL6 StringType(),真的),StructField (“COL8 StringType(),真的),StructField (“COL9 StringType(),真的)))(df顯示。mapInPandas (read_process_json模式= outSchema))

我們依靠JSON爭論熊貓API。我不是100%肯定這將工作,但誰知道呢。你可能需要調整一些配置如果序列化結果太大。

Dan_Z
尊敬的貢獻者

——這就是我用來加載磁盤上的數據:

dbutils.fs.put (“/ tmp / comm_q_json。json”、“{”@odata。上下文”:“RANDOMSTRING)”,“價值”:({“COL1”:空,:“COL2 VAL2”,:“COL3 VAL3”,:“COL4 VAL4”,:“COL5 VAL5”,:“COL6 VAL6”, "COL8": "VAL7", "COL9": null }, { "COL1": null, "COL2": "VAL2", "COL3": "VAL3", "COL4": "VAL4", "COL5": "VAL5", "COL6": "VAL6", "COL8": "VAL7", "COL9": null }, { "COL1": null, "COL2": "VAL2", "COL3": "VAL3", "COL4": "VAL4", "COL5": "VAL5", "COL6": "VAL6", "COL8": "VAL7", "COL9": null } ] } """, True)

D3nnisd
新的貢獻者三世

這就跟你問聲好!

我試著你的解決方案,它適用於大多數表。年代,謝謝!

我試著另一個表,但是我得到:

ValueError:意想不到的人物發現當解碼對象價值”

我不知道如何解決這個我不能找出JSON。自動有辦法解決嗎?

歡迎來到磚社區:讓學習、網絡和一起慶祝

加入我們的快速增長的數據專業人員和專家的80 k +社區成員,準備發現,幫助和合作而做出有意義的聯係。

點擊在這裏注冊今天,加入!

參與令人興奮的技術討論,加入一個組與你的同事和滿足我們的成員。

Baidu
map