玩转大数据程序员首页投稿(暂停使用,暂停投稿)

Spark 2. RDDs 并行集合 外部数据集

2016-11-23  本文已影响548人  希尔大

可伸缩的分布式数据集 Resilient Distributed Datasets (RDDs)

原文地址: http://spark.apache.org/docs/latest/programming-guide.html
仅限交流使用,转载请注明出处。如有错误,欢迎指出

Henvealf/译

Spark 的核心概念就是 RDD,是一个容错性极高的元素集合,他可以使用在并行的操作中。这里有两种创建 RDDs 的方式:

  1. 在你的程序中并行存在的集合。

  2. 引用外部存储系统中的数据集,比如共享文件系统,HDFS,HBase,或者 Hadoop InputFormat 提供的其他数据源。

并行的数据集(Parallelized Collections)

Scala

并行的数据集的创建是通过调用 SparkContextparalleize 方法完成的,该方法的参数是你程序中的一个集合( 一个 Scala Seq )。 这个集合中的元素就会被拷贝成一个分布式的能够被并行操作的数据集。举个例子:

val data = Array(1, 2, 3, 4, 5)
val distData = sc.parallelize(data)

创建之后,我们就可以调用 distData.reduce((a, b) => a + b),来计算数组中元素的总和。之后我们试一试在集群上执行这个操作。

对于并行数据集,一个重要的属性(参数)就是分割数据集后的分区(partition)数目。Spark 将会在集群上为每一个分区运行一个 task。经典情况下,你会为你集群上的每个 CPU 提供 2-4 个分区。一般情况下,分区数会根据你的集群状况自动决定。当然,你也可以手动的指定他,就使用 parallelize 方法的的第二个参:

sc.parallelize(data, 10)

注意:有些地方会把 分区(partition)叫做 分片(slices),他们是相通的。

Java 代码

List<Integer> data = Arrays.asList(1, 2, 3, 4, 5);
JavaRDD<Integer> distData = sc.parallelize(data);

Python

data = [1, 2, 3, 4, 5]
distData = sc.parallelize(data)

外部数据集 (External Datasets)

Scala

Spark 能够从任何 Hadoop 支持的存储源中创建分布式数据集,包括你本地文件系统, HDFS, HBase,Cassandra,Amazon S3。

Spark 支持 文本文件, SequenceFiles 或者其他的 Hadoop InputForm。

可以使用 SparkContext 的 textFile 方法创建一个文本文件的 RDD, 方法得到一个文件的 URI,会把他读成行级别的集合。例子:

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

一旦创建成功, distFile 就能够被数据集操作来使用,比如计算所有行的字符个数:

distFile.map(s => s.length).reduce((a, b) => a + b)

使用 Spark 读取文件的几点注意事项:

除了 文本文件, Spark 的 Scala API 还支持其他几种数据格式:

Java 文档在此: http://spark.apache.org/docs/latest/programming-guide.html#external-datasets

End!!

上一篇下一篇

猜你喜欢

热点阅读