有人可以向我解释这行Scala代码吗?

时间:2017-06-02 18:45:49

标签: scala apache-spark

Scala语法一直让我疯狂。下面是Spark驱动程序中的一行Scala。除了最后,我得到了大部分内容。

val ratings = lines.map(x => x.toString().split("\t")(2))

(2)只是漂浮在那里没有意义。我从理智上理解它是RDD中的第三个项目,但为什么没有一个点或某些东西将它连接到声明的其余部分?

3 个答案:

答案 0 :(得分:5)

Scala用于访问Array元素的语法。

x.toString().split("\t")

以上内容会返回Array。添加(2)将返回该数组中的第三个元素。这是用于在数组上调用.apply(2)的语法糖,它为您提供所提供索引的元素。

一个例子:

val numbers = Array("beaver", "aardvark", "warthog")
numbers(0) // "beaver"; same as numbers.apply(0)
numbers(1) // "aardvark"
numbers(2) // "warthog"

答案 1 :(得分:1)

因为字符串x被拆分成一个数组,这是访问数组元素的语法

答案 2 :(得分:0)

在我的观察中

val fruits = Array("Apple", "Banana", "Orange");

fruits.map(x => x.toString().split("\t")(0))
Array[String] = Array(Apple, Banana, Orange)

fruits.map(x => x.toString().split("\t"))    
Array[Array[String]] = Array(Array(Apple), Array(Banana), Array(Orange))

fruits.map(x => x.toString())
Array[String] = Array(Apple, Banana, Orange)