我在hdfs中有一个用逗号(,)分隔的文件,我正在尝试使用scala提取第六列,因为我已经在下面的代码中编写了该列

object WordCount {
 def main(args: Array[String])
 {
 val textfile = sc.textFile("/user/cloudera/xxx/xxx")
 val word = textfile.filter( x => x.length >  0 ).map(_.replaceAll("\\|",",").trim)
 val keys = word.map(a => a(5))
 keys.saveAsTextFile("/user/cloudera/xxx/Sparktest")
 }
}

但是我得到HDFS的结果不是我想要的。

以前我的数据是:
MSH|^~\&|RQ|BIN|SMS|BIN|2019||ORU^R01|120330003918|J|2.2
PID|1|xxxxx|xxxx||TEST|Rooney|19761202|M|MR^^M^MR^MD^11|7|0371 HOES LANE^0371

现在我的数据是:
\
T
I
,
1
N
\
T
I
,
1
N
\
T
I

我希望我的结果是:
BIN
TEST

我不知道我在做什么错。请帮忙

最佳答案

您将|替换为,,但没有按逗号分割,因此word仍然具有RDD[String]类型,而不是您期望的RDD[Array[String]]类型。然后,a => a(5)将每个字符串视为一个字符数组,从而得到您看到的结果。

不确定为什么首先要用逗号替换管道,您可以:

val word = textfile.filter(x => x.length >  0).map(_.split('|'))
val keys = word.map(a => a(5).trim)

关于scala - 使用Spark选择特定列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38740675/

10-10 11:10