一、加载外部存储系统的文件构建RDD
首先,textFile方法构建时,支持多种方式,包括目录加载、通配符加载等,如:
1)textFile("/my/directory"):加载指定目录下的所有文件。
2.textFile("/my/directory/∗.txt"):加载指定目录下所有txt格式的文件。
3)textFile("/my/directory/∗.gz"):下载指定目录下所有.gz格式的文件。
其次,Spark基于HDFS存储系统时,可以加载任何支持HadoopInputFormat格式的文件输入,同时也支持任何以HadoopOutputFormat格式的文件输出。下面以加载时不同的Ha-doopInputFormat来说明Spark对不同文件格式的支持。类似的,当Spark输出到外部存储系统时,对应不同格式应使用相应的HadoopOutputFormat子类。
小技巧:文件路径中,目录的通配符使用“∗∗”,比如val file="hdfs∶//wh001∶8020//user/harli/∗∗/∗.∗",对应于hdfs∶//wh001∶8020//user/harli/下所有子目录下的所有“∗.∗”格式的文件。
下面举例分析不同文件格式对应的HadoopInputFormat子类设置。
比如textFile和sequenceFile这两个方法,其底层都是调用了hadoopFile接口,只是使用的加载参数不同,下面从源码上进行分析。
textFile的源码:(www.xing528.com)
textFile方法调用hadoopFile时,对应的InputFormat设置为TextInputFormat,即文本文件的输入。
sequenceFile的源码:
sequenceFile方法调用hadoopFile时,对应的InputFormat设置为SequenceFileInputFor- mat,即序列文件的输入。
最后,关于文件压缩方式,如textFile("/my/directory/∗.gz"),由于.gz格式的压缩文件是Hadoop内置支持的(根据扩展名自动识别),因此可以直接加载。但如果使用不同压缩格式时,应该修改HDFS的配置信息,具体配置信息请查询具体版本的Hadoop官方文档。
注意:内置的.gz压缩格式不支持split。
二、从Scala数据集构建RDD
除了使用如案例中的textFile方法加载外部存储系统的数据来构建RDD外,RDD还可以从Scala数据集构建,下面使用SparkContext的parallelize方法来构建RDD,代码如下:
Parallelize的第二个参数可以用于设置构建的RDD的分区个数,当该参数未指定时,使用SparkContext的默认并行数。当Parallelize的分区参数未指定时,具体可见下面的源码分析。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。