我有两个RDDs
第一个(productID,category)
第二个(customerID,productID,quantity)
如何使输出看起来像(customerID,category,quantity)
?
逻辑是将第二个productID
的每个rdd
替换为第一个category
的相应rdd
。
我想使用scala来解决问题
答案 0 :(得分:2)
您的两个case classes
rdds
case class Products(productId:String, category:String)
case class Customer(customerId:String, productId:String, quantity:Int)
您有两个rdds
val rdd1 = sc.parallelize(Seq(
Products("product1", "category1"),
Products("product2", "category2"),
Products("product3", "category3"),
Products("product4", "category4")
))
val rdd2 = sc.parallelize(Seq(
Customer("customer1", "product1", 5),
Customer("customer1", "product2", 6),
Customer("customer2", "product3", 2),
Customer("customer2", "product4", 9)
))
您可以使用productId join
两个rdds
,但在加入之前,您必须使用productId作为密钥创建pairRDD
。
rdd1.map(prod => (prod.productId, prod))
rdd2.map(customer => (customer.productId, customer))
最后一步是简单的join
并选择您想要的值。
rdd1.join(rdd2).map(x => (x._2._2.customerId, x._2._1.category, x._2._2.quantity))
我希望这会有所帮助