【发布时间】:2019-11-30 06:33:05
【问题描述】:
我有一个 Spark Scala 程序,它使用 REST API 批量获取数据,一旦检索到所有数据,我就会对它们进行操作。
当前计划:
对于每个批次,创建 RDD 并将其与之前的 RDD 合并 使用之前的 API 调用
rdd.union(currentRdd)创建。在最终的 RDD 上运行
重现问题的简单程序:
def main(args: Array[String]) = {
val conf = new SparkConf().setAppName("Union test").setMaster("local[1]")
val sc = new SparkContext(conf)
val limit = 1000;
var rdd = sc.emptyRDD[Int]
for (x <- 1 to limit) {
val currentRdd = sc.parallelize(x to x + 3)
rdd = rdd.union(currentRdd)
}
println(rdd.sum())
}
问题:
- 当批次数很高时,程序会抛出 StackOverflowError : Exception in thread "main" java.lang.StackOverflowError
at org.apache.spark.rdd.UnionRDD$$anonfun$1.apply
我假设,当批次数量增加时,RDD 依赖图变得非常复杂并引发错误。
解决此问题的最佳方法是什么?
【问题讨论】:
标签: scala apache-spark rdd