我有一个嵌套的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。如果不是这不会有帮助。 –