Spark常见转换(transformation)运算简介

本文介绍的转换(transformation)运算适用于所有类型的RDD

Element-wise转换:

Spark中,最常用的的转换运算是map()filter()map()运算会对RDD中的每个元素进行函数运算,而filter()运算只会作用于RDD中符合过滤条件的元素,运算结果生成一个新的RDD。看下面这个例子:

spark_map_filter

需要注意的是map()运算的结果类型不一定要同输入类型一致。

有时需要从一个输入元素生成多个输出元素,这时可以使用flatMap()运算。同map()一样,flatMap()
也会对输入RDD中的每个元素进行运算,但运算结果是一个包含返回值的迭代器(iterator)。最终产生的RDD会包含所有迭代器中的元素。但要注意的是,这个RDD的元素数据类型并不是迭代器,而是迭代器所包含的元素的数据类型。flatMap()map()的区别可以用下图来理解

spark_flatmap_map

可以认为flat的含义就是“铲平”迭代器,把里面的元素“拿”出来,生成一个新的RDD

 

伪集合运算(Pseudo set operations):

RDD支持很多类似数学里的集合运算:取“交集”,“并集”等等。需要注意的是,进行运算的这些RDD必须具有相同的数据类型。下图展示了一些运算:

rdd_set_operation

两个RDD之间还可以进行笛卡尔积运算:

Catersian

Scala的“=>”符号简介

Scala中的=>符号可以看做是创建函数实例的语法糖。例如:A => TA,B => T表示一个函数的输入参数类型是“A”,“A,B”,返回值类型是T。请看下面这个实例:

scala> val f: Int => String = myInt => "The value of myInt is: " + myInt.toString()
f: Int => String = <function1>

scala> println(f(3))
The value of myInt is: 3

上面例子定义函数f:输入参数是整数类型,返回值是字符串。

另外,() => T表示函数输入参数为空,而A => Unit则表示函数没有返回值。