Scala:案例类以避免使用._

时间:2018-05-19 02:58:43

标签: scala apache-spark

我有一个Scala代码,如下所示:

val new_rdd = rdd1.join(rdd2).map(x => (x._2._2, x._2._1))

我不确定,但我认为我可以使用case class来避免使用此x._2._2。你能帮帮我吗?

在这种情况下,rdd1RDD[String,Array[String]]rdd2RDD[String,Array[Int]]

2 个答案:

答案 0 :(得分:4)

这不是case class,但我认为这可能是您正在寻找的内容:

val new_rdd = rdd1.join(rdd2).map{ case (_, (a, b)) => (b, a) }

答案 1 :(得分:1)

这样的事情也可以做到:

case class Items(id: String,items: List[String])
case class ItemCounts(id: String,itemcounts: List[Int])

val rdd1 = sc.parallelize(Seq(
             Items("id1",List("item10","item2","item4")),
             Items("id2",List("item4","item9")),
             Items("id3",List("item1","item3"))))

val rdd2 = sc.parallelize(Seq(
             ItemCounts("id1",List(100,200)),
             ItemCounts("id2",List(200,500,100,1100)),
             ItemCounts("id3",List(10))))

创建一个pairRDD以便加入。

val ItemsRDD = rdd1.map(item => (item.id, item))
val ItemsCountsRDD= rdd2.map(itemcnts => (itemcnts.id, itemcnts))

ItemsRDD.join(ItemsCountsRDD).map(x => (x._2._1.id,x._2._2.itemcounts))
                             .collect.foreach(println)

结果如下所示:

(id3,List(10))
(id1,List(100, 200))
(id2,List(200, 500, 100, 1100))