页面树结构

2017-07-25 Apache Spark 2.2.0 官方文档中文版发布 : http://spark.apachecn.org/docs/cn/2.2.0/


MachineLearning 优酷地址 : http://i.youku.com/apachecn

转至元数据结尾
转至元数据起始

Spark 可以从 Hadoop 所支持的任何存储源中创建 distributed dataset(分布式数据集),包括本地文件系统,HDFSCassandraHBaseAmazon S3 等等。 Spark 支持文本文件,SequenceFiles,以及任何其它的 Hadoop InputFormat

可以使用 SparkContext 的 textFile 方法来创建文本文件的 RDD。此方法需要一个文件的 URI(计算机上的本地路径 ,hdfs://s3n:// 等等的 URI),并且读取它们作为一个 lines(行)的集合。下面是一个调用示例 : 

scala> val distFile = sc.textFile("data.txt")
distFile: org.apache.spark.rdd.RDD[String] = data.txt MapPartitionsRDD[10] at textFile at <console>:26

在创建后,distFile 可以使用 dataset(数据集)的操作。例如,我们可以使用下面的 map 和 reduce 操作来合计所有行的数量 : distFile.map(s => s.length).reduce((a, b) => a + b)

使用 Spark 来读取文件的一些注意事项 : 

  • 如果使用本地文件系统的路径,所工作节点的相同访问路径下该文件必须可以访问。复制文件到所有工作节点上,或着使用共享的网络挂载文件系统。
  • 所有 Spark 中基于文件的输入方法,包括 textFile(文本文件),支持目录,压缩文件,或者通配符来操作。例如,您可以用 textFile("/my/directory")textFile("/my/directory/*.txt") 和 textFile("/my/directory/*.gz")
  • textFile 方法也可以通过第二个可选的参数来控制该文件的分区数量。默认情况下,Spark 为文件的每一个 block(块)创建的一个分区(HDFS 中块大小默认是 64M),当然你也可以通过传递一个较大的值来要求一个较高的分区数量。请注意,分区的数量不能够小于块的数量。

除了文本文件之外,SparkScala API 也支持一些其它的数据格式 : 

  • SparkContext.wholeTextFiles 可以读取包含多个小文本文件的目录,并返回它们的每一个 (filename, content) 对。这与 textFile 形成对比,它的每一个文件中的每一行将返回一个记录。
  • 针对 SequenceFiles,使用 SparkContextsequenceFile[K, V] 方法,其中 KV 指的是它们在文件中的类型。这些应该是 Hadoop 中 Writable 接口的子类,例如 IntWritable 和 Text。此外,Spark 可以让您为一些常见的 Writables 指定原生类型。例如,sequenceFile[Int, String] 会自动读取 IntWritablesTexts 
  • 针对其它的 Hadoop InputFormats,您可以使用 SparkContext.hadoopRDD 方法,它接受一个任意 JobConfinput format(输入格式)类,key 类和 value 类。通过相同的方法你可以设置你 Hadoop Job 的输入源。你还可以使用基于 “new” 的 MapReduce APIorg.apache.hadoop.mapreduce)来使用 SparkContext.newAPIHadoopRDD 以设置 InputFormats
  • RDD.saveAsObjectFile 和 SparkContext.objectFile 支持使用简单的序列化的 Java Object 来保存 RDD。虽然这不像 Avro 这种专用的格式一样高效,但其提供了一种更简单的方式来保存任何的 RDD