在磚上,我們用下麵的代碼來平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
}
]
}
' ' '
我如何解決這個問題或者解決這個?
提前謝謝!
親切的問候,
丹尼斯
例如:
從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%肯定這將工作,但誰知道呢。你可能需要調整一些配置如果序列化結果太大。