首页 > 解决方案 > 需要以制表符分隔的形式获取数组元素

问题描述

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

我所做的是;

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))

有什么我遗漏或需要纠正的吗?请建议

标签: scalaapache-sparkrdd

解决方案


你必须改变一点你的逻辑,即在创建最终字符串时,而不是创建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))

我希望答案有帮助


推荐阅读