在sheel中运行Spark

RDD基本概念
Resilient Distributed Dataset 叫做弹性分布式数据集,是Spark中最基本的数据抽象,是分布式计算的实现载体,代表一个不可变,可分区,里面的元素并行计算的集合。

Dataset: 一个数据集合,用来存放数据的。之前我们学习的Scala中,Array, Set等也叫数据集。

Distributed: 分布式存储的,表示数据是存放在不同的机器上的。这就和我们前面学习数据结构就不同了。

Resilient: 数据可以保存在内存或者磁盘中。

不可变的 :immutable。类比理解scala中的不可变集合或者是使用val修饰的变量。

可分区的 :集合的数据课划分成为很多部分,每部分称为分区:Partition

并行计算 :集合中的数据可以被并行的计算处理,每个分区数据被一个Task任务处理。

RDD的创建

从集合内存中创建

可以通过将本地集合(如数组、列表等)传递给 SparkContext 的 parallelize 方法来创建 RDD。

复制代码
/ 创建 SparkConf 和 SparkContext
    val conf = new SparkConf().setAppName("RDDFromCollection").setMaster("local[*]")
    val sc = new SparkContext(conf)

    // 创建一个本地集合
    val data = Array(1, 2, 3, 4, 5)

    // 通过 parallelize 方法将本地集合转换为 RDD
    val distData = sc.parallelize(data, 2) // 第二个参数是分区数

从外部存储中创建。 例如,读入外部的文件。

复制代码
// 创建 SparkConf 和 SparkContext
    val conf = new SparkConf().setAppName("RDDFromHDFS").setMaster("local[*]")
    val sc = new SparkContext(conf)
    // 从 HDFS 加载文本文件
    val hdfsRDD = sc.textFile("hdfs://namenode:8020/path/to/your/file.txt")
// 获取并打印分区数val partitionCount = hdfsRDD.getNumPartitions
println(s"The number of partitions is: $partitionCount")
parkConf 和 SparkContext

SparkConf 类用于配置 Spark 应用程序的各种参数。通过 SparkConf 类,你可以设置应用程序的名称、运行模式(如本地模式、集群模式)、资源分配(如内存、CPU 核心数)等。

主要作用配置应用程序参数:可以设置 Spark 应用程序的各种属性,如应用程序名称、主节点地址等。

管理配置信息:将配置信息封装在一个对象中,方便在应用程序中传递和使用。

SparkContext 是 Spark 应用程序的入口点,它代表了与 Spark 集群的连接。通过 SparkContext,你可以创建 RDD(弹性分布式数据集)、累加器、广播变量等,还可以与外部数据源进行交互。

在shell中运行RDD程序

案例:启动hdfs集群,打开hadoop100:9870,在wcinput目录下上传一个包含很多个单词的文本文件。

启动之后在spark-shell中写代码。

复制代码
// 读取文件,得到RDD
    val rdd1 = sc.textFile("hdfs://hadoop100:8020/wcinput/words.txt")
    // 将单词进行切割,得到一个存储全部单词的RDD
    val rdd2= fileRDD.flatMap(line => line.split(" "))
    // 将单词转换为元组对象,key是单词,value是数字1
    val rdd3= wordsRDD.map(word => (word, 1))
    // 将元组的value按照key来分组,对所有的value执行聚合操作(相加)
    val rdd4= wordsWithOneRDD.reduceByKey((a, b) => a + b)
    // 收集RDD的数据并打印输出结果
    rdd4.collect().foreach(println)
RDD的五大特征

RDD有5个特征,我们分别来介绍。

1.RDD是有分区的。

RDD的分区是RDD数据存储的最小单位。一份数据本质是分隔了多个分区。 如下图示,假如1个RDD有3个分区,RDD内存储了123456,那么数据本质上分散在三个分区内进行存储。


2.计算函数会作用于每个分区

RDD的方法会作用在所有的分区上。

3.每个RDD之间是有依赖关系(RDD有血缘关系)

RDD的每次转换都会生成一个新的RDD,所以RDD之间就会形成类似于流水线一样的前后依赖关系。在部分分区数据丢失时,Spark可以通过这个依赖关系重新计算丢失的分区数据,而不是对RDD的所有分区进行重新计算。


4.Key-Value型的RDD可以有分区器

数据默认分区器:Hash分区规则,可以手动设置一个分区器(rdd.partitionBy的方式来设置)

5.每一个分区都有一个优先位置列表

优先位置列表会存储每个Partition的优先位置,对于一个HDFS文件来说,就是每个Partition块的位置。按照"移动数据不如移动计算"的理念,Spark在进行任务调度时,会尽可能地将任务分配到其所要处理数据块的存储位置。

相关推荐
数智化精益手记局23 分钟前
拆解物料管理erp系统的核心功能,看物料管理erp系统如何解决库存积压与缺料难题
大数据·网络·人工智能·安全·信息可视化·精益工程
Elastic 中国社区官方博客2 小时前
使用 Observability Migration Platform 将 Datadog 和 Grafana 的仪表板与告警迁移到 Kibana
大数据·elasticsearch·搜索引擎·信息可视化·全文检索·grafana·datalog
jkyy20142 小时前
AI运动数字化:以技术重塑场景,健康有益赋能全域运动健康管理
大数据·人工智能·健康医疗
金融小师妹2 小时前
4月30日多因子共振节点:鲍威尔“收官效应”与权力结构重塑的预期重构
大数据·人工智能·重构·逻辑回归
2601_949925182 小时前
AI Agent如何重构跨境物流的决策?
大数据·人工智能·重构·ai agent·geo优化·物流科技
苍煜3 小时前
分布式事务生产实战选型对比
分布式
xiaoduo AI3 小时前
客服机器人问题解决率怎么统计?Agent系统自动判断是否解决,比人工回访准?
大数据·人工智能·机器人
小五兄弟4 小时前
YouTube 肖像检测扩展背后:短剧出海版权保护的技术实现与实战策略
大数据·人工智能
阿瑞说项目管理5 小时前
2026 实战入门指南:企业 Agent 到底能解决哪些工作问题?
大数据·人工智能·agent·智能体·企业级ai
ZOOOOOOU5 小时前
云边端协同架构下,门禁权限引擎的离线决策与策略续存实现
大数据·人工智能·架构