[1.2]Spark core编程(一)之RDD总论与创建RDD的三种方式

本文介绍了Spark中RDD的基本概念及其特点,包括其作为分布式数据集的弹性、容错性和并行处理能力,并通过实例展示了如何使用Scala创建和操作RDD。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考

DT大数据梦工厂
Spark官网

场景

  • RDD的理解
    一、RDD是基于工作集的应用抽象;是分布式、函数式编程的抽象。
    MapReduce:基于数据集的处理。两者的共同特征:位置感知(具体数据在哪里)、容错、负载均衡。
    基于数据集的处理:从物理存储设备上加载数据,然后操作数据,写入物理存储设备。eg、Hadoop MapReduce
    不适应场景:
    1、不适合于大量的迭代
    2、不适合于交付式查询
    3、基于数据流的方式,不能够复用曾经的结果或者中间计算结果。
    二、RDD的”弹性”(Resilient)
    1、自动的进行内存与磁盘数据存储的切换
    2、基于Lineage的高效容错
    3、Task如果失败会自动进行特定次数的重试
    4、Stage如果失败会自动进行特定次数的重试,而且只会计算失败的分片
    5、checkpoint和persist:对于长链接的操作,把中间的数据放到磁盘上去
    6、数据分片的高度弹性(提高、降低并行度)
    7、数据调度弹性:DAG TASK和资源管理无关

  • 创建RDD的几种方式
    1、基于程序中的集合创建RDD-作用:测试
    2、基于本地文件创建RDD-作用:大数据量的测试
    3、基于HDFS创建RDD-作用:生产环境最常用的RDD创建方式
    4、基于DB、NoSQL(例如HBase)、S3、基于数据流创建RDD

实验

package main.scala

import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
/**
 * 创建RDD的三种方式初体验
 */
object RDDBaseOnCollection {

  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setMaster("local[*]").setAppName("RDDBaseOnCollection")
    val sc = new SparkContext(conf)

    /*
     * 1、从scala集合中创建RDD
     * 计算:1+2+3+...+100
     */
    val nums = 1 to 100
    val rdd = sc.parallelize(nums)
    val sum = rdd.reduce(_+_)
    println("sum:"+sum)

    /*
     * 2、从本地文件系统创建RDD
     * 计算 people.json 文件中字符总长度
     */
    val rows = sc.textFile("file:///home/hadoop/spark-1.6.0-bin-hadoop2.6/examples/src/main/resources/people.json")
    val length = rows.map(row=>row.length()).reduce(_+_)
    println("total chars length:"+length)

     /*
     * 3、从HDFS创建RDD(lines: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[8] at textFile at)
     *  计算 hive_test 文件中字符长度
     */
    val lines = sc.textFile("hdfs://112.74.21.122:9000/user/hive/warehouse/hive_test")
    println( lines.map(row=>row.length()).reduce(_+_))
  }
}

总结

一、“ RDD(resilient distributed dataset) is a collection of elements partitioned across the nodes of the cluster that can be operated on in parallel. RDDs are created by starting with a file in the Hadoop file system (or any other Hadoop-supported file system), or an existing Scala collection in the driver program, and transforming it. Users may also ask Spark to persist an RDD in memory, allowing it to be reused efficiently across parallel operations. Finally, RDDs automatically recover from node failures.”
二、RDD是基于工作集的应用抽象;是分布式、函数式编程的抽象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值