是
我很好奇Spark中将RDD传递给函数的功能。
def my_func(x : RDD[String]) : RDD[String] = {
do_something_here
}
假设我们定义了一个上面的函数。当我们调用该函数并将现有的RDD [String]对象作为输入参数传递时,此my_function是否为此RDD做一个“副本”作为函数参数?换句话说,它是按引用调用还是按值调用?
马里奥斯
在Scala中,传递时什么也不会被复制(就C / C ++中的值传递而言)。大多数基本类型Int,String,Double等都是不可变的,因此通过引用传递它们是非常安全的。(注意:如果您传递的是可变对象,并且对其进行了更改,那么任何引用该对象的人都将看到更改)。
最重要的是,RDD是惰性的,分布式的,不可变的集合。通过函数传递RDD并对其进行转换(映射,过滤器等)并不会真正传输任何数据或触发任何计算。
所有链接的转换都“记住”,并会自动在当你执行和正确的顺序被触发行动的RDD,如坚持它,或者在本地驱动程序收集它(通过collect()
,take(n)
等等)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
编辑于
我来说两句