如何解决错误:Value ReedbyKey不是org.apache.spark.rdd.rdd [(int,int)]



我正在学习Apache Spark并尝试在Scala终端执行一个小程序。

我使用以下命令启动了DFS,纱线和历史记录服务器:

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)]

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

这来自使用PAIR RDD函数。ReadyByKey方法实际上是PAIRDDDFUNCTIONS类的一种方法,它具有RDD的隐式转换。因此,它需要几个隐式类型类。通常,当使用简单的混凝土类型时,它们已经处于范围。但是,您应该能够修改您的方法,也需要那些同样的隐式。

,但我不确定如何实现。

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

看来您缺少导入。尝试在控制台中写下此内容:

import org.apache.spark.SparkContext._

然后运行上述命令。此导入带来了一个隐式转换,使您可以使用redabybykey方法。

最新更新