[英]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 [(String,com.mypackage.UserElement)]必需:org.apache.spark.rdd.PairRDDFunctions [String,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方法,你需要在函数中提供密钥,
在你的例子中,你可以简单地给userRecords.keyBy(t => t.getName())
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.