我正在尝试将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]
我在这里缺少什么?非常感谢!
答案 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())