Spark-Core RDD的创建

一、RDD创建的3种方式:

  1、从集合中创建RDD

  2、从外部存储创建RDD

  3、从其他RDD转换得到新的RDD

二、从集合中创建RDD

  1、使用parallelize函数创建 

1 scala> val arr = Array(10,20,30,40,50,60)
2 arr: Array[Int] = Array(10, 20, 30, 40, 50, 60)
3 
4 scala> val rdd1 = sc.parallelize(arr)
5 rdd1: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[0] at parallelize at <console>:26

  2、使用makeRDD函数创建

1 makeRDD和parallelize是一样的.
2 scala> val rdd1 = sc.makeRDD(Array(10,20,30,40,50,60)) 3 rdd1: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[0] at makeRDD at <console>:24

  3、说明

  (1)一旦 RDD 创建成功, 就可以通过并行的方式去操作这个分布式的数据

  (2)parallelize和makeRDD还有一个重要的参数就是把数据集切分成的分区数

  (3)Spark 会为每个分区运行一个任务(task). 正常情况下, Spark 会自动的根据你的集群来设置分区数

三、从外部存储创建 RDD

  Spark可以从任意Hadoop支持的存储数据源来创建分布式数据集

  可以是本地文件系统,HDFS、Cassandra、HBase、Amazon S3等

  Spark 支持 文本文件, SequenceFiles, 和其他所有的 Hadoop InputFormat  

1 scala> var distFile = sc.textFile("words.txt")
2 distFile: org.apache.spark.rdd.RDD[String] = words.txt MapPartitionsRDD[1] at textFile at <console>:24
3 
4 scala> distFile.collect
5 res0: Array[String] = Array(hello, hello world, how are you, abc efg)

  说明:

  (1)url可以是本地文件系统文件, hdfs://..., s3n://...等等

  (2)如果是使用的本地文件系统的路径, 则必须每个节点都要存在这个路径

  (3)所有基于文件的方法, 都支持目录, 压缩文件, 和通配符(*). 例如:  

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

  (4)textFile还可以有第二个参数, 表示分区数. 默认情况下, 每个块对应一个分区.(对 HDFS 来说, 块大小默认是 128M). 可以传递一个大于块数的分区数, 但是不能传递一个比块数小的分区数

  

四、从其他 RDD 转换得到新的 RDD

 

原文地址:https://www.cnblogs.com/hyunbar/p/12033517.html