在Apache Spark中创建顶点和边缘会导致错误:递归值字段需要类型

时间:2015-02-18 17:00:19

标签: scala apache-spark

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

使用Ampcamp练习学习Apache Spark

我正在尝试使用我自己的Vertices和Edges数据文件使用第4.2章的示例创建一个Graph。我的顶点表由12列0到11组成。列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

我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

您忘记了;

{ 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. 根据此值返回元组:(fields(11).toLong, fields(1), fields(2)
  3. 所以这是不同的表达方式,应该分开。