Spark能够从任何支持Hadoop的存储源来创建RDD,包括本地的文件系统,HDFS,Cassandra,Hbase,Amazon S3等。Spark支持textFile、SequenceFiles和任何其他的Hadoop的InputFormat格式的数据。

1、textfile的RDD可以通过SparkContext’s textFile 的方法来创建,这个方法需要传递一个文件路径URL作为参数,然后读取对应文件的每一行的数据,形成一个以行数据为单位的集合。例如:

    scala> val distFile = sc.textFile("data.txt")

    distFile: RDD[String] = MappedRDD@1d4cee08

2、textfile方法中,如果传入的是一个本地文件的URL,这必须保证Spark集群中其它机器也能够访问相同的URL。

3、在Spark中,所有的输入方法(包括textFile)都支持文件夹、压缩文件、通配符。例如:

    textFile("/my/directory"), textFile("/my/directory/*.txt"), and textFile("/my/directory/*.gz").

4、textFile方法中,还接受第二个参数,该参数是指定对应产生的RDD的分区数。默认情况下,Spark会根据HDFS的块的大小来作为分区的大小,即以块的数量作为分区的数目M。你可以设置大于这个分区数M,但是不能设置小于这个分区数M。

5、除了textFile方法之外,Spark提供了如下的方法来加载外部数据:

  (1)SparkContext.wholeTextFiles

    该方法是读一个路径下所有的小文件,并且将每个小文件内容content作为value,文件的filename作为key,以pairs(key,value)的形式返回给客户端。该方法与textfile刚好相反,textfile是返    回每个文件的每一行的记录作为key,value的形式返回。

  (2)SparkContext’s sequenceFile[K, V]

    对于sequenceFiles,我们可以用sequenceFile[K,V]方法来加载外部的数据,其中K,V的类型是文件中key和value的类型。但这都是Hadoop的Writable(是一个接口类型)类型的子类。

  (3)SparkContext.hadoopRDD

    对于其他的Hadoop的InputFormats,你可以用hadoopRDD的方法来加载外部的数据源。该方法需要传入特定的 JobConf and input format class, key class and value class

6、RDD的简单的保存方式:

  RDD.saveAsObjectFile and SparkContext.objectFile  support saving an RDD in a simple format consisting of serialized Java objects. While this is not as efficient as specialized     formats like Avro, it offers an easy way to save any RDD.