Spark代码解析:这段sequenceFile映射操作具体实现了什么?
拆解这段Spark代码里的map操作
先把原代码和背景放在最前面:
原代码:
val jsonString = sc.sequenceFile[Long,String](paths).map(x => { x._2 })背景说明:
paths变量存储了若干文本文件路径的CSV。
咱们一步步来捋,重点聚焦在map操作上:
先看前面的
sc.sequenceFile[Long,String](paths)
这行代码是Spark从paths指定的文件路径(这里是CSV里记录的那些路径)读取SequenceFile。SequenceFile是Hadoop生态里的一种键值对格式文件,这里我们指定了键的类型是Long,值的类型是String,所以读取后得到的是一个RDD[(Long, String)]——简单说就是一堆(长整数, 字符串)这样的二元组集合。核心的
map(x => { x._2 })操作map是Spark里最常用的转换算子之一,它的作用是遍历原RDD的每一条记录,对每条记录执行你定义的函数,然后把函数返回的结果拼成一个全新的RDD。- 这里的
x就代表原RDD里的每一条二元组记录(也就是每个(Long, String))。 - 在Scala里,元组的元素是用
_1、_2、_3...来访问的(注意索引从1开始,不是0哦):x._1是取这个二元组的第一个元素(也就是那个Long类型的键),x._2就是取第二个元素(String类型的值)。 - 所以这个
map做的事情特别明确:把原RDD里的每一组键值对,都只保留它的「值部分」,直接丢掉「键部分」。
最后总结一下:经过这个map操作后,原来的RDD[(Long, String)]就变成了RDD[String],然后赋值给jsonString变量——从变量名能猜出来,这个String应该是JSON格式的文本内容~
内容的提问来源于stack exchange,提问作者oortcloud_domicile
相关产品推荐
相关产品推荐

