Spark核心编程-RDD创建操作

目前有两种类型的基础RDD:一种是并行集合(Parallelized Collections),接收一个已经存在的scala集合,然后进行各种并行计算;另外一种是从外部存储创建的RDD,外部存储可以是文本文件或者HDFS,也可以是Hadoop的接口API。

一、并行化集合创建操作

通过SparkContext的parallelize方法,在一个已经存在的scala集合上创建的Seq对象,集合的对象将会被复制,创建出一个可以被并行操作的分布式数据集(RDD)。在SparkContext类中实现了parallelize和makeRDD两个并行化集合创建操作。

  • parallelize(seq:Seq[T], numSlices:Int = defaultParallelisem):RDD[T]
// 创建SparkConf对象
SparkConf conf = new SparkConf().setAppName(appName).setMaster(master);
// 创建JavaSparkContext对象
JavaSparkContext sc = new JavaSparkContext(conf);
// 创建一个List集合
List<Integer> data = Arrays.asList(1, 2, 3, 4, 5);
// 并行化结合创建RDD,第一个参数为集合对象,第二个参数为分区数
JavaRDD<Integer> distData = sc.parallelize(data, 10);
  • makeRDD(seq:Seq[(T, Seq[String])]):RDD[T]
  • makeRDD(seq:Seq[T], numSlices:Int = defaultParallelisem):RDD[T]
// 用法和parallelize类似,不过该方法可以指定每一个分区的首选位置。(只有Scala Api提供了该方法)

// 指定1到10的首选位置为master节点,11到15的首选位置为slave1和slave2节点
var collect = Seq((1 to 10, Seq("master")), (11 to 15, Seq("slave1","slave2")))
var rdd = sc.makeRDD(collect)

// 查看分区1的首选位置
rdd.preferredLocations(rdd.partitions(0))

二、外部存储创建操作

Spark可以将Hadoop所支持的存储资源转化成RDD,如本地文件,HDFS,Cassandra, HBase等,Spark支持文本文件,Sequence Files以及Hadoop InputFormat格式。

  • textFile(path:String, minPartitions:Int = defaultMinPartitions):RDD[String]

使用textFile操作可以将本地文件或HDFS文件转换成RDD,该操作支持整个文件目录读取(如textFile("/my/directory"))。文件可以是文本或者压缩文件。需要注意的地方有两点:一所有的节点必须能够访问到该文件,否则运行中会报“FileNotFoundException”;二默认情况下为每一个数据块分配一个分区,用户也可以显示的指定更多的分区,但是不能少于HDFS文件的数据块数量。

// 从本地文件data.txt创建RDD
JavaRDD<String> distFile = sc.textFile("data.txt");

注: textFile支持分区,支持模式匹配,例如把D:\wordcount\目录下temp开头的给转换成RDD。

JavaRDD<String> distFile = sc.textFile("D:\\wordcount\\temp*");

 多个路径可以使用逗号分隔,例如:

JavaRDD<String> distFile = sc.textFile("D:\\wordcount\\temp1,D:\\wordcount\\temp2",4);

猜你喜欢

转载自blog.csdn.net/Anbang713/article/details/81584786