在 Scala Spark 中找不到 reduceByKey 方法

Posted

技术标签:

【中文标题】在 Scala Spark 中找不到 reduceByKey 方法【英文标题】:reduceByKey method not being found in Scala Spark 【发布时间】:2014-07-19 13:54:13 【问题描述】:

尝试从源代码运行http://spark.apache.org/docs/latest/quick-start.html#a-standalone-app-in-scala。

这一行:

val wordCounts = textFile.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey((a, b) => a + b)

正在抛出错误

value reduceByKey is not a member of org.apache.spark.rdd.RDD[(String, Int)]
  val wordCounts = logData.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey((a, b) => a + b)

logData.flatMap(line => line.split(" ")).map(word => (word, 1)) 返回一个 MappedRDD 但我在http://spark.apache.org/docs/0.9.1/api/core/index.html#org.apache.spark.rdd.RDD 中找不到这种类型

我正在从 Spark 源代码运行此代码,所以可能是类路径问题?但所需的依赖项在我的类路径上。

【问题讨论】:

【参考方案1】:

其实你可以在 PairRDDFunctions 类中找到它。 PairRDDFunctions 是一个类,其中包含通过隐式转换在 (key, value) 对的 RDD 上可用的额外函数。

https://spark.apache.org/docs/2.1.0/api/scala/index.html#org.apache.spark.rdd.PairRDDFunctions

【讨论】:

【参考方案2】:

如果您在 ScalaIDE 上使用 maven,我只是通过将依赖项从 spark-streaming 版本 1.2 更新到版本 1.3 来解决问题。

【讨论】:

【参考方案3】:

您应该从SparkContext 导入隐式转换:

import org.apache.spark.SparkContext._

他们使用“pimp up my library”模式将方法添加到特定类型的 RDD。如果好奇,请参阅SparkContext:1296

【讨论】:

耶,救了我。谢谢。 赞成。为什么 IntelliJ 没有为我解决这个问题? 这对我不起作用。我正在使用 Eclipse,以下是我的 org.apache.sparkspark-core_2.101.3.0 @AmrishPandey 你正在使用 spark 2.X:你需要做import org.apache.spark.SparkSession._

以上是关于在 Scala Spark 中找不到 reduceByKey 方法的主要内容,如果未能解决你的问题,请参考以下文章

spark 入门map reduce 最好的几个例子

connectedRouter错误:在状态树中找不到路由器reducer,它必须安装在“router”下

Scala在通用特征方法中找不到案例类参数

spark 的一些常用函数 filter,map,flatMap,lookup ,reduce,groupByKey

无法在Postgres中实例化外部Hive Metastore /在类路径中找不到驱动程序

在 Spark 流中找不到 KafkaUtils 类