Creating Vertices and Edges in Apache Spark results in error: recursive value fields needs type

Creating Vertices and Edges in Apache Spark results in error: recursive value fields needs type

我正在使用 http://ampcamp.berkeley.edu/5/exercises/graph-analytics-with-graphx.html

上的 Ampcamp 练习学习 Apache Spark

我正在尝试使用我自己的顶点和边数据文件使用第 4.2 章的示例创建一个图形。我的顶点 table 由 0 到 11 的 12 列组成。第 11 列存储顶点 ID。我的代码几乎等同于 Amplab 示例,但导致错误 18:

import org.apache.spark.rdd.RDD
import org.apache.spark.graphx._
val thoughts: RDD[String] = sc.textFile("/user/hue/thoughts_long.txt")
val vertices = thoughts.map { line => val fields = line.split('\t') (fields(11).toLong, fields(1), fields(2)) }

<console>:18: error: recursive value fields needs type

我做错了什么?

你忘记了;:

{ line => val fields = line.split('\t'); (fields(11).toLong, fields(1), fields(2) }

相当于:

{ 
  line => val fields = line.split('\t');
  (fields(11).toLong, fields(1), fields(2);
}

相当于:

{ 
  line => val fields = line.split('\t')
  (fields(11).toLong, fields(1), fields(2)
}

Scala 不需要在表达式之间使用 ;,除非您将它们写在一行中。示例中的代码做了两件事:

  1. 赋值:val fields = line.split('\t')
  2. returns 基于此值的元组:(fields(11).toLong, fields(1), fields(2)

所以应该分开的是不同的表达方式。