我是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
答案 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)
}
希望这会有所帮助!