需要以制表符分隔的形式获取数组元素

时间:2018-06-16 05:19:44

标签: scala apache-spark rdd

我试图搜索答案但是找不到。

我做的是什么;

val a1 = sc.textFile("/home/Dataset/CSV/EMP4.csv") -- fine 

val emp4 = a1.map(x=>x.split(",")).map(x=>(x(0),x(1),x(4))).filter(x=>x._3 > "2000").sortBy(x=>x._1) ---> fine 

当我做的时候

val result = emp4.collect.mkString(" ")

its giving me result as 

String = (102,bMeena,5000) (103,cStevana,3000) (104,dMeenab,5000) (105,eStevanc,3000) (109,Meena,5000) (110,Stevana,5000) (111,Meenab,5000)

但我的期望是得到o / p如下;

((102 bMeena 5000),(103 cStevana 3000), (104 dMeenab 5000), (105 eStevanc 3000), (109 Meena 5000), (110 Stevana 5000), (111 Meenab 5000))

我缺少什么或需要纠正什么?请建议

1 个答案:

答案 0 :(得分:0)

您必须改变一点逻辑,即创建Tuple3而不是创建Array而不是创建最终字符串时稍微扭曲

val a1 = sc.textFile("/home/Dataset/CSV/EMP4.csv")

val emp4 = a1.map(x=>x.split(",")).map(x=>Array(x(0),x(1),x(4))).filter(x=>x(2) > "2000").sortBy(x=>x(0))
val result = emp4.map(_.mkString("(", " ", ")")).collect.mkString(",")

你应该得到你想要的结果

//result: String = (102 bMeena 5000),(103 cStevana 3000),(104 dMeenab 5000),(105 eStevanc 3000),(109 Meena 5000),(110 Stevana 5000),(111 Meenab 5000)

如果您不希望结果以字符串形式显示,那么您可以省略最后.mkString(",")应该给您的结果

val result = emp4.map(_.mkString("(", " ", ")")).collect
//result: Array[String] = Array((102 bMeena 5000), (103 cStevana 3000), (104 dMeenab 5000), (105 eStevanc 3000), (109 Meena 5000), (110 Stevana 5000), (111 Meenab 5000))

我希望答案很有帮助