apache-spark - 读取大型 zip 文件时 Spark 错误 : java. lang.IllegalArgumentException : Size exceeds Integer. MAX_VALUE

标签 apache-spark

我正在尝试使用 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/

相关文章:

scala - Spark中的内部map函数

apache-spark - Spark 流和高可用性

r - 如何使用 sparklyr 过滤部分匹配

python - Pyspark:是否有与 pandas info() 等效的方法?

python - 使用 UDF 时忽略条件

apache-spark - Spark : use the global config variables in executors

apache-spark - Spark 仓库 VS Hive 仓库

hadoop - 使用 HBASE 的 Spark 与使用 HDFS 的 Spark

apache-spark - Pyspark - 如何将 Parquet 文件转换为带有分隔符的文本文件

scala - 如何将成功的 Iterable[Try[U]] 过滤器转换为 Iterable[U]?