2016-01-23 66 views
2

我试着写了下面的方法:错误:值连接不是org.apache.spark.rdd.RDD [(Long,U)]的成员?

scala> def isEqual[U, V](expected: RDD[U], result: RDD[V]) = { 
|   val expectedIndexValue: RDD[(Long, U)] = expected.zipWithIndex().map{ case (row, idx) => (idx, row) } 
|   val resultIndexValue: RDD[(Long, V)] = result.zipWithIndex().map{ case (row, idx) => (idx, row) } 
|   val combined = expectedIndexValue.join(resultIndexValue) 
|  } 

但我得到了以下错误:

<console>:52: error: value join is not a member of org.apache.spark.rdd.RDD[(Long, U)] 
     val combined = expectedIndexValue.join(resultIndexValue) 

回答

5

join函数是在一个名为PairRDDFunctions特殊类型的定义,有一个隐式转换在这种特殊类型的元组的RDD之间。如果您使用的是旧版本的Spark,则需要导入隐式转换,例如import org.apache.spark.SparkContext._。 SparkContext上还有一个明确的(albiet不赞成的)函数,可以手动使用,名为rddToPairRDDFunctions

但是两者的显函数和隐式转换需要的各类类标签存在,所以你可以使用一个假类的标签,但因为你是在斯卡拉的工作,你可能也只是添加类标签作为你的函数的隐含参数。

+0

你刚刚在我的同一时间回答,所以他正在斯卡拉运行Spark解释器?他不需要在某个地方打电话吗?或者他的方法是什么?很高兴删除我的答案,如果我远离基地感谢 – JimLohse

+1

耶,这是scala语法正在使用。 – Holden

+0

我明白了,但是他不需要在某个地方打电话来创建RDD吗? – JimLohse

相关问题