使用scala加入2个RDD

时间:2017-06-03 22:10:54

标签: scala apache-spark apache-spark-sql rdd

我有两个RDDs

第一个(productID,category)

第二个(customerID,productID,quantity)

如何使输出看起来像(customerID,category,quantity)

逻辑是将第二个productID的每个rdd替换为第一个category的相应rdd

我想使用scala来解决问题

1 个答案:

答案 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))

我希望这会有所帮助