我是新来的火花,我使用scala来分隔管道分隔文件并保存在没有管道分隔的hdfs中,因为我已经编写了这段代码。
object WordCount {
def main(args: Array[String])
{
val textfile = sc.textFile("/user/cloudera/xxxx/xxxx")
val word = textfile.map( l => l.split("|"))
word.saveAsTextFile("/user/cloudera/xxxxx/Sparktest")
}
}
但是当我执行它时,我没有收到任何错误,但在我的hdfs中,我得到的数据低于数据。
[Ljava.lang.String;@10ed847f
[Ljava.lang.String;@4316ebe
[Ljava.lang.String;@495d7e18
[Ljava.lang.String;@19017f49
[Ljava.lang.String;@314b9e72
[Ljava.lang.String;@5b8f67a6
[Ljava.lang.String;@23ddf240
[Ljava.lang.String;@404b5a25
[Ljava.lang.String;@130b541d
[Ljava.lang.String;@4cbf45af
[Ljava.lang.String;@21780b86
[Ljava.lang.String;@503c9b94
[Ljava.lang.String;@3b0a3ab3
我不知道我做错了什么。 请帮忙
答案 0 :(得分:3)
那是因为你将每个字符串拆分成一个字符串数组。要保存为文本文件,如果要与逗号连接,则需要使用mkString(",")
。但我没有看到任何目的。
如果您想用逗号替换管道分隔符,可以使用_.replaceAll("|",",")
代替并保存:
val word = textfile.map(_.replaceAll("\\|",",").replaceFirst(",","").trim)
word.saveAsTextFile("/user/cloudera/xxxxx/Sparktest")
PS:您可以将逗号替换为您想要的任何内容,例如空格,单词等。
所以 为什么管道需要转义?
字符串拆分需要正则表达式参数。一个未转义的|被解析为正则表达式,意思是“空字符串或空字符串”,这不是你的意思。