在这种情况下如何获得k-v对?

时间:2017-03-19 03:24:17

标签: scala apache-spark keyvaluepair

我正在使用spark来处理一些数据: 现在我有:

val firstRdd = datas.map(data =>
  if (data.Type == 1) (data.id, data))
val secondRdd = datas.map(data =>
  if (data.Type == 2) (data.parentId, data))

然后我希望将firstRdd与secondRdd连接,但我发现它们不在k-v对中,所以我不能在这里执行连接,如何在这里获得具有相同结构的k-v对?

1 个答案:

答案 0 :(得分:0)

您需要在每个RDD中过滤所需的行,然后创建对rdd

val firstRdd = datas.filter(_.Type == 1).map(data =>
  (data.id, data))
val secondRdd = datas.filter(_.Type == 2).flatMap(data =>
  data.parentId.map(parentId => (parentId, data)))
firstRdd.join(secondRdd)