Spark RDD的创建

Spark RDD的创建

版本信息:Spark2.12,scala2.12.11
Spark创建RDD有三种方式

1.从集合中创建RDD

从集合中创建RDD,Spark提供了两种方式:parallelize和makeRDD

val sparkConf = new SparkConf().setMaster("local[*]").setAppName("RDD Create")
val sc = new SparkContext(sparkConf)

val rdd1: RDD[Int] = sc.parallelize(List(1, 2, 3, 4))
val rdd2: RDD[Int] = sc.makeRDD(List(1, 2, 3, 4))
rdd1.collect().foreach(println)
rdd2.collect().foreach(println)
sc.stop()

从底层代码实现来看,其实makeRDD方法就是parallelize方法,使用makeRDD是不是更见名知意了呢

def makeRDD[T: ClassTag](
    seq: Seq[T],
    numSlices: Int = defaultParallelism): RDD[T] = withScope {
        parallelize(seq, numSlices)
    }

2.从外部存储中创建RDD

外部存储系统比如:本地文件系统,HDFS或者Hadoop支持的文件系统
文本文件编码必须为UTF-8
从文件中创建RDD,就是将文件中的数据作为处理的数据源
Spark提供了两个读取文本文件的方法:textFile和wholeTextFile
  textFile:以行为单位读取数据
  wholeTextFile:以文件为单位读取数据,并以键值对的形式返回,key为文件路径,value为文件内容

val sparkConf = new SparkConf().setMaster("local[*]").setAppName("create RDD with file")
val sc = new SparkContext(sparkConf)

// 2.1 从本地文件系统中创建
// path路径默认以当前环境的根路径为基准,可以是绝对路径或相对路径
val rdd: RDD[String] = sc.textFile("F:\\Projects\\BidData\\Spark\\datas\\1.txt")
val rdd1: RDD[String] = sc.textFile("datas/1.txt")

// path路径也可以是目录名称
val rdd2: RDD[String] = sc.textFile("datas")

// path路径可以使用通配符,筛选文件
val rdd3: RDD[String] = sc.textFile("datas/1*.txt")

// 2.2 从HDFS中创建
val rdd4: RDD[String] = sc.textFile("hdfs://master:9000/1.txt")

// wholeTextFiles
val rdd5: RDD[(String, String)] = sc.wholeTextFiles("datas")
// rdd5结果输出:
// (file:/F:/Projects/BidData/Spark/datas/parallelism/1.txt,1 )
// (file:/F:/Projects/BidData/Spark/datas/parallelism/2.txt,hu nan )
// (file:/F:/Projects/BidData/Spark/datas/parallelism/3.txt,chang sha )
rdd5.collect().foreach(println)
sc.stop()

3.从其他RDD中创建

主要是通过一个RDD运算完成后,在产生新的RDD

val sparkConf = new SparkConf().setMaster("local[*]").setAppName("RDD")
val sc = new SparkContext(sparkConf)

val rdd: RDD[Int] = sc.parallelize(List(1, 2, 3, 4))
// 通过map算子转化为新的RDD
val mapRDD: RDD[(Int, Int)] = rdd.map((_, 1))
mapRDD.collect().foreach(println)
sc.stop()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值