我有一個嵌套的NDJ(新行分隔的JSON)文件,我需要讀入一個spark數據框並保存到實木複合地板。在試圖渲染架構我用這個函數:將龐大的JSON文件讀入Spark Dataframe
def flattenSchema(schema: StructType, prefix: String = null) : Array[Column] = {
schema.fields.flatMap(f => {
val colName = if (prefix == null) f.name else (prefix + "." + f.name)
f.dataType match {
case st: StructType => flattenSchema(st, colName)
case _ => Array(col(colName))
}
})
}
上是由
val df = sqlCtx.read.json(sparkContext.wholeTextFiles(path).values)
讀返回數據幀我也切換這val df = spark.read.json(path)
所以,這只是作品與NDJs,而不是多行JSON - 同樣的錯誤。
這是對工人 java.lang.OutOfMemoryError: Java heap space
引起內存不足的錯誤。
我已經改變了JVM的內存選項和火花執行人/驅動器選項無濟於事
有沒有辦法來流的文件,扁平化架構,並添加到數據幀遞增? JSON的某些行包含來自前面條目的新字段......所以稍後需要填寫這些字段。
它如何解決由'wholeTextFiles'產生的'java.lang.OutOfMemoryError'? –
我正在處理「是否有一種方法可以對文件進行流式處理,將模式平滑並逐步添加到數據框中?JSON的某些行包含來自前面條目的新字段......所以稍後需要填寫這些字段。 」。我沒有看到關於內存問題解決的問題。所以給了他多種方法。 – Ramzy
如果NDJ是JSONL,那麼OP不應該使用wholeTextFiles。如果不是這不會有幫助。 –