请帮助我了解地图(_(0))的含义:
scala> a.collect
res97: Array[org.apache.spark.sql.Row] = Array([1039], [1010], [1002], [926])
scala> a.collect.map(_(0))
res98: Array[Any] = Array(1039, 1010, 1002, 926)
答案 0 :(得分:1)
<强> 1。函数式编程中的.map
将您想要的函数应用于集合的每个元素。
说,您想要为您拥有的数组中的每个元素添加一些数据,这可以按照以下方式完成,
scala> val data = Array("a", "b", "c")
data: Array[String] = Array(a, b, c)
scala> data.map(element => element+"-add something")
res10: Array[String] = Array(a-add something, b-add something, c-add something)
我要说的是,在每个元素add something
上,element
是不必要的,因为无论如何你都要添加every element
。因此,_
代表任何元素。
因此,可以通过以下方式完成相同的地图。
scala> data.map(_+"-add something")
res9: Array[String] = Array(a-add something, b-add something, c-add something)
另外,请注意,如果您有一个行映射函数,则使用_
。
<强> 2。 collection(index)
是访问集合中第n个元素的方法。
例如
scala> val collection = Array(Vector(1039), Vector(1010), Vector(1002), Vector(926))
collection: Array[scala.collection.immutable.Vector[Int]] = Array(Vector(1039), Vector(1010), Vector(1002), Vector(926))
scala> collection(0)
res13: scala.collection.immutable.Vector[Int] = Vector(1039)
因此,结合#1和#2,在您的情况下,您将映射原始集合并获取第一个元素。
scala> collection.map(_.head)
res17: Array[Int] = Array(1039, 1010, 1002, 926)
答案 1 :(得分:0)
您正在访问集合a
中项目的第0个元素。在处理集合中的项目时,_
是Scala中的常见占位符。
更具体地说,您的代码等同于
a.collect.map(item => item(0))