如何解决错误:value reduceByKey不是org.apache.spark.rdd.RDD [(Int,Int)]的成员?

时间:2017-12-04 11:26:57

标签: scala hadoop apache-spark rdd hadoop2

我正在学习apache spark并尝试在scala终端上执行一个小程序。

我使用以下命令启动了dfs,yarn和history服务器:

start-dfs.sh
start-yarn.sh
mr-jobhistory-deamon.sh start historyserver

然后在scala终端中,我编写了以下命令:

 var file = sc.textFile("/Users/****/Documents/backups/h/*****/input/ncdc/micro-tab/sample.txt");
 val records = lines.map(_.split("\t"));
 val filters = records.filter(rec => (rec(1) != "9999" && rec(2).matches("[01459]")));
 val tuples = filters.map(rec => (rec(0).toInt, rec(1).toInt)); 
 val maxTemps = tuples.reduceByKey((a,b) => Math.max(a,b));

除最后一个命令外,所有命令都成功执行,这会引发以下错误:

error: value reduceByKey is not a member of org.apache.spark.rdd.RDD[(Int, Int)]

我找到了一些解决方案,如:

  

这通常来自使用一对rdd函数。 reduceByKey方法实际上是PairRDDFunctions类的一个方法,它具有来自RDD的隐式转换。因此它需要几个隐式类型类。通常在处理简单的混凝土类型时,这些已经在范围内。但是你应该能够修改你的方法,也需要那些隐含的方法。

但我不确定如何实现这一目标。

任何帮助,如何解决此问题?

1 个答案:

答案 0 :(得分:2)

您似乎缺少导入。尝试在控制台中写这个:

import org.apache.spark.SparkContext._

然后运行上面的命令。此导入带来隐式转换,允许您使用reduceByKey方法。