Spark/Scala:将RDD传递给函数

Jes*_*Jes 7 scala apache-spark rdd

我很好奇究竟是什么将一个RDD传递给一个函数在Spark中.

def my_func(x : RDD[String]) : RDD[String] = {
  do_something_here
}
Run Code Online (Sandbox Code Playgroud)

假设我们定义了一个如上所述的函数.当我们调用该函数并传递一个现有的RDD [String]对象作为输入参数时,这个my_function是否为该RDD作为函数参数进行"复制"?换句话说,它是通过引用调用还是按值调用?

mar*_*ios 12

在Scala中传递的东西没有被复制(在C/C++中的传值).大多数基本类型Int,String,Double等都是不可变的,因此通过引用传递它们是非常安全的.(注意:如果您正在传递一个可变对象而您进行了更改,那么任何引用该对象的人都会看到更改).

最重要的是,RDD是惰性,分布式,不可变的集合.通过函数传递RDD并对它们应用转换(映射,过滤等)并不真正传输任何数据或触发任何计算.

所有链接的转换都"记住",并会自动在当你执行和正确的顺序被触发行动的RDD,如坚持它,或者在本地驱动程序收集它(通过collect(),take(n)等等)