将RDD与数组值配对

时间:2019-07-15 16:58:55

标签: apache-spark

我是Spark的新手。尝试从以下格式展平RDD。

rdd=((key),((value1,value2),Some((value3,value4))))   

(key,value1,value2,value3,value4)

试图映射以下值。带有案例类

case class outdata(Key: String, Value1: String, Value2: String, Value3:String, Value4:String)

rdd.map{case(x,y)=>outdata(x_.1,y._1._1,y._1._2,y._2._1,y._2._2)}

得到错误y._2._1 is not member

2 个答案:

答案 0 :(得分:1)

Scala的模式匹配具有足够的表现力,可以在没有案例类的情况下执行此操作:

rdd.map{case (key : String, ((value1 : String, value2: String), Some((value3 : String, value4 : String)))) => (key, value1, value2, value3, value4) }

答案 1 :(得分:0)

这就是您可以做到的

rdd.map { case (x, y) =>
  val defaultValue = ("NA", "NA")
  (x, y._1._1, y._1._2, y._2.getOrElse(defaultValue)._1, y._2.getOrElse(defaultValue)._2)
}

希望这会有所帮助!