RDD的创建

RDD有三种创建方式

1、从内存/集合中创建

val conf: SparkConf = new SparkConf().setAppName("test01").setMaster("local[*]")
val sc = new SparkContext(conf)
    
val rdd1: RDD[Int] = sc.parallelize(List(1, 2, 3, 4))

val rdd2: RDD[Int] = sc.makeRDD(List(1, 2, 3, 4))

注:

  • makeRDD和parallelize方法是一回事,makeRDD内部会调用parallelize方法。
  • parallelize和makeRDD还有一个重要的参数就是把数据集切分成的分区数
  • Spark会为每个分区运行一个任务(task),正常情况下,Spark会自动的根据你的集群来设置分区数

使用以上方法创建RDD时,可以指定分区数,例如 makeRDD(List(1,2,3,4),3),指定三个分区。如果不在代码里面显示指定分区数,则会使用默认分区数,即按照创建conf里传入的setMaster()里面的参数指定分区数,如果setMaster里没指定,则使用totalCores作为分区数。即有多少个内核就是多少个分区

    def positions(length: Long, numSlices: Int): Iterator[(Int, Int)] = {
      (0 until numSlices).iterator.map { i =>
        val start = ((i * length) / numSlices).toInt
        val end = (((i + 1) * length) / numSlices).toInt
        (start, end)
      }
    }

2、从外部存储创建RDD

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

可以是本地文件系统, HDFS, Cassandra, HVase, Amazon S3 等等.

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

val conf: SparkConf = new SparkConf().setAppName("test01").setMaster("local[*]")
val sc = new SparkContext(conf)

val line: RDD[String] = sc.textFile("inputFile")
line.saveAsTextFile("out")
  • url可以是本地文件系统文件, hdfs://..., s3n://...等等
  • 如果是使用的本地文件系统的路径, 则必须每个节点都要存在这个路径
  • 所有基于文件的方法, 都支持目录, 压缩文件, 和通配符(*). 例如: textFile("/my/directory"), textFile("/my/directory/*.txt"), and textFile("/my/directory/*.gz").
  • textFile还可以有第二个参数, 表示分区数. 默认情况下, 每个块对应一个分区.(对 HDFS 来说, 块大小默认是 128M). 可以传递一个大于块数的分区数, 但是不能传递一个比块数小的分区数.

textFile还可以传第二个参数,

def defaultMinPartitions: Int = math.min(defaultParallelism, 2)

此处的defaultParallelism也是conf中的指定的值。和makeRDD中一样。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值