[英]Spark RDD tuple transformation
我正在尝试转换这种格式的字符串元组的RDD:
(("abc","xyz","123","2016-02-26T18:31:56"),"15")
(("abc","xyz","123"),"2016-02-26T18:31:56","15")
基本上将时间戳字符串分隔为单独的元组元素。 我尝试了以下操作,但仍然不够干净和正确。
val result = rdd.map(r => (r._1.toString.split(",").toVector.dropRight(1).toString, r._1.toString.split(",").toList.last.toString, r._2))
但是,它导致
(Vector(("abc", "xyz", "123"),"2016-02-26T18:31:56"),"15")
我正在寻找的预期输出是
(("abc", "xyz", "123"),"2016-02-26T18:31:56","15")
这样,我可以在单独的映射操作中使用r._1
, r._2
(时间戳字符串)和r._3
访问元素。
任何提示/指针将不胜感激。
Vector.toString
中将包含字符串“ Vector”。 而是使用Vector.mkString(",")
。
例:
scala> val xs = Vector(1,2,3)
xs: scala.collection.immutable.Vector[Int] = Vector(1, 2, 3)
scala> xs.toString
res25: String = Vector(1, 2, 3)
scala> xs.mkString
res26: String = 123
scala> xs.mkString(",")
res27: String = 1,2,3
但是,如果您希望能够以元组而不是字符串的形式访问(abc,xyz,123)
,则还可以执行以下操作:
val res = rdd.map{
case ((a:String,b:String,c:String,ts:String),d:String) => ((a,b,c),ts,d)
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.