我在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/