Spark创建RDD的方式

Spark并行化集合创建RDD

在这里插入图片描述

/**
 * 并行化集合通过parallelize方法创建RDD
 *
 * 调用parallelize方法是可以传入numSlices参数,该参数是用来指定该RDD的partition个数
 * Spark会为每个partition启动一个Task来计算
 * Spark官方建议为每个CPU创建2~4个partition
 */
object ParallelizeCollection {
  def main(args: Array[String]): Unit = {
    // 创建SparkConf
    val conf = new SparkConf().setAppName("ParallelizeRDD").setMaster("local")
    // 创建SparkContext
    val sc = new SparkContext(conf)
    // 创建集合
    val array = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
    // 通过parallelize序列化创建RDD
    val rdd = sc.parallelize(array,5)
    // 进行reduce操作
    val sum = rdd.reduce((x, y) => x + y)
    // 输出结果
    println("累加和:" + sum)
  }

}

Spark根据本地文件创建RDD

在这里插入图片描述

object LocalFileRDD {
  def main(args: Array[String]): Unit = {
    // 创建SparkConf
    val conf = new SparkConf().setAppName("LocalFileRDD").setMaster("local")
    // 创建SparkContext
    val sc = new SparkContext(conf)
    // 根据本地文件创建RDD
    val rdd1 = sc.textFile("/Users/wuwang/Desktop/data.txt")
    // 根据本地压缩文件创建RDD
    val rdd2 = sc.textFile("/Users/wuwang/Desktop/data.zip")
    // zip根据需要特殊转换
    val rdd5 = sc.binaryFiles("/Users/wuwang/Desktop/data.zip")
    val rdd = rdd5.flatMap {
      case (name: String, content: PortableDataStream) =>
        val zis = new ZipInputStream(content.open())
        Stream.continually(zis.getNextEntry)
          .takeWhile(_ != null)
          .flatMap(_ => {
            val reader = new BufferedReader(new InputStreamReader(zis))
            Stream.continually(reader.readLine()).takeWhile(_ != null)
          })
    }
    // 根据本地目录创建RDD
    val rdd3 = sc.textFile("/Users/wuwang/Desktop/data/")
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spark创建RDD方式有以下几种: 1. 从一个已有的集合或序列中创建RDD:通过SparkContext.parallelize()方法SparkContext.makeRDD()方法创建RDD。示例代码如下: ```python from pyspark import SparkContext sc = SparkContext("local", "RDD Example") data = [1, 2, 3, 4, 5] rdd = sc.parallelize(data) ``` 2. 通过读取外部数据源来创建RDD:通过SparkContext.textFile()或SparkContext.wholeTextFiles()方法来读取外部数据源创建RDD。示例代码如下: ```python from pyspark import SparkContext sc = SparkContext("local", "RDD Example") text_file = sc.textFile("/path/to/textfile") ``` 3. 通过转换已有的RDD创建新的RDD:通过对已有的RDD进行转换操作,生成新的RDDRDD的转换操作包括map、filter、flatMap、union等等。示例代码如下: ```python from pyspark import SparkContext sc = SparkContext("local", "RDD Example") data = [1, 2, 3, 4, 5] rdd = sc.parallelize(data) # 转换操作 squared_rdd = rdd.map(lambda x: x*x) ``` 4. 通过从存储系统中读取数据创建RDD:通过SparkContext.newAPIHadoopFile()或SparkContext.hadoopFile()方法来从存储系统(如HDFS、S3等)中读取数据创建RDD。示例代码如下: ```python from pyspark import SparkContext, SparkConf from pyspark.rdd import PortableDataStream conf = SparkConf().setAppName('HadoopRDD') sc = SparkContext(conf=conf) rdd = sc.newAPIHadoopFile( path='/path/to/data', inputFormatClass='org.apache.hadoop.mapreduce.lib.input.TextInputFormat', keyClass='org.apache.hadoop.io.LongWritable', valueClass='org.apache.hadoop.io.Text') ``` 5. 通过并行化已有的RDD创建新的RDD:通过对已有的RDD进行并行化操作,生成新的RDDRDD的并行化操作包括repartition、coalesce等等。示例代码如下: ```python from pyspark import SparkContext sc = SparkContext("local", "RDD Example") data = [1, 2, 3, 4, 5] rdd = sc.parallelize(data) # 并行化操作 repartitioned_rdd = rdd.repartition(2) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值