背景:
在学习spark的时候,有一个开篇的例子中有两句代码如下所示:
val input = sc.textFile(inputFile)
val words = input.flatMap(line=>line.split(" "))
上面两句的意思是,输入一个文件,然后以单空格作为将每一行的输入划分为单词s。
另外,在Spark提供的API中也有关于Map函数的用法,两个函数的解释如下:
究竟这两个函数有什么区别呢,接下来就一探究竟。
测试:
Sorry, I do not know why the law of input in Chinese can not work suddenly. So , then I will write the rest of the article in my shit English.
First, let's test flatMap function, the picture as follow.
Ok,输入法的病好了,可以不再为装比找打的事烦恼了。。。
在上面的实例中,我保存了flatMap之后的文件,上图左边是在控制台上输出的结果,右边是文件中的内容吧。
在文件中看到了词被分开了,在控制台上看到了一个数组Array下的单词集。
接下来,再看一下Map操作。
上图的左边是在控制台上的输出,右图是在文件的内容。
结论:
map之后collect的结果是Array[Array[String]],每一行的处理都会产生一个Array对象,里面的元素是每一行的单词。所以,保存在文件中的是,每一行输入的Array对象。
flatMap之后的collect的结果是Array[String],其实是先map后flat的过程。先map产生了Array[Array[String]],然后又经过flat合并成了Array[String]。在文件中保存的结果是每一个分割后的单词。