我在下面的版本中使用Scala和Spark。
斯卡拉 - 2.10.4 Spark - 1.2.0
我在下面提到我的情况。
我有一个带有嵌套元组的RDD(Say - JoinOp)(例如,有案例类) -
(123,(null,employeeDetails(Smith,NY,DW)))
(456,(null,employeeDetails(John,IN,CS)))
此RDD是通过两个文件的连接创建的。
现在,我的要求是将此JSON格式转换为文本文件格式,而不使用任何“Null”和任何案例类名称(此处为“employeeDetails”)。
我想要的输出是=
123,Smith,NY,DW
456,John,IN,CS
我尝试使用String Interpolation但是取得了部分成功。
val textOp = JoinOp.map{jm => s"${jm._1},${jm._2._2}"}
如果我打印textOp,它会给我低于输出。
123,employeeDetails(Smith,NY,DW)
456,employeeDetails(John,IN,CS)
现在,如果我尝试使用String插值访问“employeeDetails”案例类中的嵌套元素,它将抛出如下错误。
JoinOp.map{jm => s"${jm._1},${jm._2._2._1}"}.foreach(println)
<console> :23: Error : value _1 is not member of jm
在这里我可以理解,使用上面的语法,它无法访问“employeeDetails”案例类的嵌套元素。
这个问题的解决方案可能是什么。任何帮助或指出都会有很大帮助。
非常感谢, Pralay
答案 0 :(得分:1)
案例类具有字段名称。因此,您需要使用该位置的字段名称,而不是._1
。假设以下定义:
case class EmployeeDetails(name: String, state: String)
你会访问它
JoinOp.map{jm => s"${jm._1},${jm._2._2.name}"}.foreach(println)
答案 1 :(得分:1)
如果您只需打印案例类的所有字段,可以使用productIterator遍历字段列表。
val textOp = JoinOp.map { jm =>
s"""${jm._1},${jm._2._2.productIterator.mkString(",")}"""
}
答案 2 :(得分:0)
你可以这样做:
dd/mm/yyyy