我正在尝试使用 Spark(EMR 上的 2.1)处理 ~500M gz 文件,我无法更改格式或将它们拆分为更小的大小。
其中一个执行者失败:
java.lang.IllegalArgumentException: Size exceeds Integer.MAX_VALUE
at sun.nio.ch.FileChannelImpl.map(FileChannelImpl.java:869)
at org.apache.spark.storage.DiskStore$$anonfun$getBytes$2.apply(DiskStore.scala:103)
at org.apache.spark.storage.DiskStore$$anonfun$getBytes$2.apply(DiskStore.scala:91)
at org.apache.spark.util.Utils$.tryWithSafeFinally(Utils.scala:1303)
at org.apache.spark.storage.DiskStore.getBytes(DiskStore.scala:105)
at org.apache.spark.storage.BlockManager.getLocalValues(BlockManager.scala:462)
at org.apache.spark.storage.BlockManager.getOrElseUpdate(BlockManager.scala:698)
at org.apache.spark.rdd.RDD.getOrCompute(RDD.scala:334)
at org.apache.spark.rdd.RDD.iterator(RDD.scala:285)
at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:87)
at org.apache.spark.scheduler.Task.run(Task.scala:99)
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:282)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
我知道,由于 gz 不可分割,单个任务处理整个文件,有什么办法可以以某种方式避免错误?
最佳答案
事实证明,错误不是直接读取数据时出现的,而是在读取数据后的处理过程中出现的。 我添加了一个重新分区步骤来解决问题。
关于apache-spark - 读取大型 zip 文件时 Spark 错误 : java. lang.IllegalArgumentException : Size exceeds Integer. MAX_VALUE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44098357/