在Scala中将RDD映射到PairRDD

时间:2015-06-04 23:30:31

标签: java scala apache-spark rdd

我正在尝试将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]

我在这里缺少什么?非常感谢!

3 个答案:

答案 0 :(得分:7)

您不需要这样做,因为它是通过implicits(明确地rddToPairRDDFunctions)完成的。任何Tuple2[K,V]类型的RDD都可以自动用作PairRDDFunctions。如果您真的想要,您可以明确地执行implicit所做的事情并将RDD包装在PairRDDFunction中:

val pair = new PairRDDFunctions(rdd)

答案 1 :(得分:2)

我认为你只是错过了xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"> 的导入。这会在范围内带来所有正确的隐式转换,以创建PairRDD。

以下示例应该有效(假设您已在sc下初始化了SparkContext):

org.apache.spark.SparkContext._

答案 2 :(得分:1)

你也可以使用keyBy方法,你需要在函数中提供密钥,

在您的示例中,您只需提供userRecords.keyBy(t => t.getName())