在Spark的rdd.map(_。swap)

时间:2016-01-08 06:42:36

标签: scala apache-spark

我是Scala和Spark的新手。任何人都可以解释

的含义是什么
rdd.map(_.swap)

?如果我查看Scala / Spark API,我找不到swap作为RDD类中的方法。

4 个答案:

答案 0 :(得分:7)

swap是Scala Tuples上的一种方法。它将Tuple2(或对)的第一个和第二个元素相互交换。例如:

scala> val pair = ("a","b")
pair: (String, String) = (a,b)

scala> val swapped = pair.swap
swapped: (String, String) = (b,a)

RDD的map函数将给定函数应用于RDD的每个元素。在这种情况下,要应用于每个元素的函数只是

_.swap

在这种情况下,下划线是Scala在编写匿名函数时的简写,它与传入函数的参数有关,而不是命名它。因此,上面的代码片段可以重写为:

rdd.map{ pair => pair.swap }

因此,您发布的代码段会在RDD的每一行中交换元组/对的第一个和第二个元素。

答案 1 :(得分:2)

仅当rdd的类型为RDD[Tuple2[T1,T2]]时才可用,因此swapon the Tuple2

答案 2 :(得分:0)

对于使用spark创建的元组,请使用此lambda:

RDD map1 : ("a", 1), ("b", 2), ("c", 3)...
val map 2 = map1.map(a=> (a._2, a._1))

这将返回RDD

RDD map2 : (1, "a"), (2, "b"), (3, "c")...

答案 3 :(得分:0)

在Python中,其工作方式如下:

rdd.map(lambda x: (x[1], x[0]))

这会将键值对中的(a,b)交换为(b,a)