【问题标题】:How to resolve error: value reduceByKey is not a member of org.apache.spark.rdd.RDD[(Int, Int)]?如何解决错误:值 reduceByKey 不是 org.apache.spark.rdd.RDD[(Int, Int)] 的成员?
【发布时间】:2018-05-17 20:33:50
【问题描述】:

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

我已经使用以下命令启动了 dfs、yarn 和历史服务器:

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 函数。 reduceByKey 方法实际上是 PairRDDFunctions 类的一个方法,它有一个从 RDD 的隐式转换。所以它需要几个隐式类型类。通常在使用简单的具体类型时,它们已经在范围内。但是您应该能够修改您的方法以也需要那些相同的隐式。

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

任何帮助,如何解决这个问题?

【问题讨论】:

标签: scala hadoop apache-spark rdd hadoop2


【解决方案1】:

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

import org.apache.spark.SparkContext._

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-25
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多