我是Scala和Spark的新手。任何人都可以解释是什么意思
rdd.map(_.swap)
?如果我查看Scala / Spark API,我找不到swap
作为RDD类中的方法。
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每行中元组/对的第一个和第二个元素。
只有当rdd
是RDD[Tuple2[T1,T2]]
类型时,这才有效,所以swap
是on the Tuple2
对于使用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")...
在Python中它的工作方式如下:
rdd.map(lambda x: (x[1], x[0]))
这将在键值对中交换(a,b)到(b,a)。