当前位置: 首页 > news >正文

Spark-core-RDD入门

RDD基本概念

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

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

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

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

然后,我们在看看它的定义中的一些关键字:

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

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

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

RDD的创建

spark的计算功能是通过RDD来实现的,那么如何去创建RDD呢?有两种创建方式。

1.从集合内存中创建

可以通过将本地集合(如数组、列表等)传递给 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) // 第二个参数是分区数

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")

可以通过getNumPartitions来获取分区的数量。

SparkConf 和 SparkContext

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

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

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

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

相关文章:

  • Clojure 学习笔记
  • Dify平台下基于搜索引擎SearXNG 和文本转换工具Marp的PPT助手搭建
  • Flutter——数据库Drift开发详细教程(五)
  • Ubuntu也开始锈化了?Ubuntu 计划在 25.10 版本开始引入 Rust Coreutils
  • 深度学习:智能车牌识别系统(python)
  • 力扣1812题解
  • 电商双十一美妆数据分析(代码)
  • 【笔记】当个自由的书籍收集者从canvas得到png转pdf
  • win11指定Microsoft Print To PDF的输出路径(电子书djvu转pdf输出路径)
  • java每日精进 5.07【框架之数据权限】
  • Zsh + iTerm2搭配使用教学,非常舒服,macOS
  • java CompletableFuture 异步编程工具用法2
  • SpringBoot学生宿舍管理系统开发实现
  • 中间件-RocketMQ
  • IPFS集群部署
  • 【JS逆向基础】并发爬虫
  • Linux复习笔记(一)基础命令和操作
  • 技术分享:Franka机器人新方案——双臂数据采集与适应性安装,带你探索具身智能的奥秘
  • C# NX二次开发:曲线和点位相关UFUN函数详解
  • 15_sysfsLinux内核模块
  • 乘客被地铁厕所门砸伤,南京地铁:突然坏的,已和乘客沟通处理
  • 上海发布首份直播电商行业自律公约,禁止虚假宣传、商业诋毁
  • 复旦发文缅怀文科杰出教授裘锡圭:曾提出治学需具备三种精神
  • 如此城市|上海老邬:《爱情神话》就是我生活的一部分
  • 98岁动物学家、北京大学教授杨安峰逝世
  • 姜再冬大使会见巴基斯坦副总理兼外长达尔