[英]Combine two different RDDs with different key in Scala
我有两个文本文件已经由 sparkcontext 创建为 rdd。
其中一个(rdd1)保存相关词:
apple,apples
car,cars
computer,computers
另一个(rdd2)保存项目数:
(apple,12)
(apples, 50)
(car,5)
(cars,40)
(computer,77)
(computers,11)
我想结合这两个 rdd
危险输出:
(apple, 62)
(car,45)
(computer,88)
如何编码?
工作的重点是为相关词选择一个关键。 在这里,我只选择第一个单词,但实际上你可以做一些比随机选择一个词更聪明的事情。
解释:
val s = Seq(("apple","apples"),("car","cars")) // create data
val rdd = sc.parallelize(s)
val t = Seq(("apple",12),("apples", 50),("car",5),("cars",40))// create data
val rdd2 = sc.parallelize(t)
val keyed = rdd.flatMap( {case(a,b) => Seq((a, a),(b,a)) } ) // could be replace with any function that selects the key to use for all of the related words
.join(rdd2) // complete the join
.map({case (_, (a ,b)) => (a,b) }) // recreate a tuple and throw away the related word
.reduceByKey(_ + _)
.foreach(println) // to show it works
即使这解决了您的问题,您也可以使用更优雅的解决方案与您可能希望研究的 Dataframes 一起使用。 您可以直接在 RDD 上使用 reduce 并跳过映射回元组的步骤。 我认为这将是一个更好的解决方案,但希望保持简单,以便更能说明我所做的事情。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.