Spark 和 Scala:无法让 Mapped RDD 从 RDD 执行 groupByKey
Spark & Scala: can't get MappedRDD to perferm groupByKey from RDD
我在尝试使用 groupByKey
或 PairRDD 或 MappedRDD 的任何函数时遇到了一个令人失望的问题。我得到的是我总是只有一个 RDD
并且我不知道如何转换它(真的我很确定转换应该被 Scala 自动检测到)。我的代码如下:
val broadcastedDistanceMeasure = sc.broadcast(dbScanSettings.distanceMeasure)
val distances = input.cartesian(input)
.filter(t => t._1!=t._2)
.map( {
case(p1, p2) => (p1) -> broadcastedDistanceMeasure.value.distance(p1,p2)
})
其中 input
是 RDD
。根据 Eclise 和 sbt run
的结果类型实际上是 RDD
。所以我无法执行 groupByKey
操作。如果我在 spark shell 上尝试几乎相同的代码,我会得到 MappedRDD
.
这是我的 build.sbt
文件:
scalaVersion := "2.10.4"
libraryDependencies += "org.apache.spark" % "spark-core_2.10" % "1.1.0"
有人可以帮我吗?
谢谢。
你好。
马可
我认为在 IDE 中,您永远不会看到任何 RDD 的 MappedRDD 类型,因为这是作为 Spark Scala API 中的隐式转换提供的。例如,如果您查看 source of SparkContext
,您会看到从通用 RDD 到专用 RDD 的隐式转换,更丰富的接口如 PairRDDFunctions
,并且从这个专用接口内部,您可以使用函数 [=13] =] 由于隐式转换而可用。所以,简而言之,我认为你只需要导入 org.apache.spark.SparkContext._
就可以实现你想要的。
在这种特殊情况下,我认为具体的转换是
implicit def rddToPairRDDFunctions[K: ClassTag, V: ClassTag](rdd: RDD[(K, V)]) =
new PairRDDFunctions(rdd)
将 RDD 包装成 PairRDDFunctions,后者又包含 groupByKey
操作。
希望对您有所帮助。
我在尝试使用 groupByKey
或 PairRDD 或 MappedRDD 的任何函数时遇到了一个令人失望的问题。我得到的是我总是只有一个 RDD
并且我不知道如何转换它(真的我很确定转换应该被 Scala 自动检测到)。我的代码如下:
val broadcastedDistanceMeasure = sc.broadcast(dbScanSettings.distanceMeasure)
val distances = input.cartesian(input)
.filter(t => t._1!=t._2)
.map( {
case(p1, p2) => (p1) -> broadcastedDistanceMeasure.value.distance(p1,p2)
})
其中 input
是 RDD
。根据 Eclise 和 sbt run
的结果类型实际上是 RDD
。所以我无法执行 groupByKey
操作。如果我在 spark shell 上尝试几乎相同的代码,我会得到 MappedRDD
.
这是我的 build.sbt
文件:
scalaVersion := "2.10.4"
libraryDependencies += "org.apache.spark" % "spark-core_2.10" % "1.1.0"
有人可以帮我吗?
谢谢。
你好。
马可
我认为在 IDE 中,您永远不会看到任何 RDD 的 MappedRDD 类型,因为这是作为 Spark Scala API 中的隐式转换提供的。例如,如果您查看 source of SparkContext
,您会看到从通用 RDD 到专用 RDD 的隐式转换,更丰富的接口如 PairRDDFunctions
,并且从这个专用接口内部,您可以使用函数 [=13] =] 由于隐式转换而可用。所以,简而言之,我认为你只需要导入 org.apache.spark.SparkContext._
就可以实现你想要的。
在这种特殊情况下,我认为具体的转换是
implicit def rddToPairRDDFunctions[K: ClassTag, V: ClassTag](rdd: RDD[(K, V)]) =
new PairRDDFunctions(rdd)
将 RDD 包装成 PairRDDFunctions,后者又包含 groupByKey
操作。
希望对您有所帮助。