gpt4 book ai didi

scala - 如何仅将集合发送到 spark 节点一次?

转载 作者:行者123 更新时间:2023-12-02 03:06:34 25 4
gpt4 key购买 nike

考虑上一个问题中的简单代码: Large task size for simplest program

import org.apache.spark.{SparkContext, SparkConf}

object LargeTaskTest {

def main(args: Array[String]) {
val conf = new SparkConf().setAppName("DataTest").setMaster("local[*]")
val sc = new SparkContext(conf)
val dat = (1 to 10000000).toArray
val data = sc.parallelize(dat).cache()
for(i <- 1 to 100){
println(data.sum)
}
}
}

我有本质上相同的问题:如何在每次迭代中摆脱“超大尺寸警告任务”?

公认的解决方案建议使用 flatMap 并行创建数据。虽然这对于整数范围来说是一个很好的解决方案,但如果我的数据实际上是我无法并行创建的对象集合(来 self 程序中的其他地方)怎么办?

我了解如果对于第一个操作,数据需要传送到所有节点,从而导致任务量很大。 但是,对于后续的操作,已经复制的数据就不能再利用了吗?

预先感谢您的帮助。

最佳答案

一般解决方案:不要使用sc.parallelize。这并不是特别有效地实现,因为它实际上是用于教学/调试,以及一些实际用例,例如并行化文件名(小)和读取 RDD 映射闭包中的文件。

在这种情况下,您可以通过不将 Range(O(1) 内存占用)转换为 Array(O(N )内存占用)。只需删除 toArray,您就不会再收到这些警告。

关于scala - 如何仅将集合发送到 spark 节点一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42453194/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com