在 Scala 中将 RDD 映射到 PairRDD
map RDD to PairRDD in Scala
我正在尝试将 RDD 映射到 Scala 中的 pairRDD,以便稍后可以使用 reduceByKey。这是我所做的:
userRecords 属于 org.apache.spark.rdd.RDD[UserElement]
我尝试从 userRecords 创建一个 pairRDD,如下所示:
val userPairs: PairRDDFunctions[String, UserElement] = userRecords.map { t =>
val nameKey: String = t.getName()
(nameKey, t)
}
但是,我得到了错误:
类型不匹配;发现:org.apache.spark.rdd.RDD[(字符串,com.mypackage.UserElement)]
要求:org.apache.spark.rdd.PairRDDFunctions[字符串,com.mypackage.UserElement]
我在这里错过了什么?非常感谢!
您不需要这样做,因为它是通过 implicits(明确地 rddToPairRDDFunctions
)完成的。任何 Tuple2[K,V]
类型的 RDD 都可以自动用作 PairRDDFunctions
。如果你真的想要,你可以明确地做 implicit
所做的并将 RDD 包装在 PairRDDFunction
:
val pair = new PairRDDFunctions(rdd)
我认为您只是缺少 org.apache.spark.SparkContext._
的导入。这会在范围内带来所有正确的隐式转换以创建 PairRDD。
下面的示例应该可以工作(假设您已经在 sc 下初始化了一个 SparkContext):
import org.apache.spark.SparkContext._
val f = sc.parallelize(Array(1,2,3,4,5))
val g: PairRDDFunctions[String, Int] = f.map( x => (x.toString, x))
也可以使用keyBy方法,需要在函数中提供key,
在你的例子中,你可以简单地给出 userRecords.keyBy(t => t.getName())
我正在尝试将 RDD 映射到 Scala 中的 pairRDD,以便稍后可以使用 reduceByKey。这是我所做的:
userRecords 属于 org.apache.spark.rdd.RDD[UserElement]
我尝试从 userRecords 创建一个 pairRDD,如下所示:
val userPairs: PairRDDFunctions[String, UserElement] = userRecords.map { t =>
val nameKey: String = t.getName()
(nameKey, t)
}
但是,我得到了错误:
类型不匹配;发现:org.apache.spark.rdd.RDD[(字符串,com.mypackage.UserElement)] 要求:org.apache.spark.rdd.PairRDDFunctions[字符串,com.mypackage.UserElement]
我在这里错过了什么?非常感谢!
您不需要这样做,因为它是通过 implicits(明确地 rddToPairRDDFunctions
)完成的。任何 Tuple2[K,V]
类型的 RDD 都可以自动用作 PairRDDFunctions
。如果你真的想要,你可以明确地做 implicit
所做的并将 RDD 包装在 PairRDDFunction
:
val pair = new PairRDDFunctions(rdd)
我认为您只是缺少 org.apache.spark.SparkContext._
的导入。这会在范围内带来所有正确的隐式转换以创建 PairRDD。
下面的示例应该可以工作(假设您已经在 sc 下初始化了一个 SparkContext):
import org.apache.spark.SparkContext._
val f = sc.parallelize(Array(1,2,3,4,5))
val g: PairRDDFunctions[String, Int] = f.map( x => (x.toString, x))
也可以使用keyBy方法,需要在函数中提供key,
在你的例子中,你可以简单地给出 userRecords.keyBy(t => t.getName())