【发布时间】:2018-04-21 17:44:08
【问题描述】:
当单个记录大小超过 3GB 时,我遇到了异常 `
java.lang.IllegalArgumentException
App > at java.nio.CharBuffer.allocate(CharBuffer.java:330)
App > at java.nio.charset.CharsetDecoder.decode(CharsetDecoder.java:792)
App > at org.apache.hadoop.io.Text.decode(Text.java:412)
App > at org.apache.hadoop.io.Text.decode(Text.java:389)
App > at org.apache.hadoop.io.Text.toString(Text.java:280)
App > at org.apache.spark.sql.execution.datasources.json.JsonFileFormat$$anonfun$createBaseRdd$1.apply(JsonFileFormat.scala:135)
App > at org.apache.spark.sql.execution.datasources.json.JsonFileFormat$$anonfun$createBaseRdd$1.apply(JsonFileFormat.scala:135)
如何增加单个记录的缓冲区大小?
【问题讨论】:
-
可能没有帮助,但值得注意的是:即使可以这样做(不确定),也可能不是正确的方法(会很慢而且有风险)。你能避免如此巨大的记录大小吗?它是怎么来的?例如,如果它是
RDD.groupByKey的结果,您可能希望将其替换为reduceByKey或其他一些聚合。 -
它是一个json文件,将所有记录作为json数组放在一个键下。我正在尝试将其弄平。但我无法对其执行任何操作。甚至不打印 json 数组的模式。
-
如果您有能力改变 JSON 文件的结构,我们能否在进一步处理之前使用一些实用程序将“单个大数组”拆分为“数组数组”?
标签: scala hadoop apache-spark memory-management spark-dataframe