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

快速了解RDD的创建与处理过程

【图书介绍】《Spark SQL大数据分析快速上手》-CSDN博客

《Spark SQL大数据分析快速上手》【摘要 书评 试读】- 京东图书

大数据与数据分析_夏天又到了的博客-CSDN博客

本节主要介绍RDD的创建及其处理过程。本节所有实战均在Spark Shell命令行方式下进行。

Spark Shell是Spark提供的一个交互式分析工具,用于快速开发和调试Spark应用程序。它是一个集成了Scala解释器的交互式环境,允许用户直接在Shell中执行Spark操作,无须编写完整的Spark应用程序。

Spark Shell提供了许多内置的函数和变量,例如SparkContext和SparkSession对象,这些对象在启动Spark Shell时会自动创建。用户可以直接使用这些对象来访问Spark的功能,例如读取数据、转换数据、执行计算等。

要启动Spark Shell,首先打开终端或命令行界面,并导航到Spark的安装目录;然后,在终端中输入以下命令:

./bin/spark-shell

该命令将启动一个交互式的Scala环境,并自动创建一个SparkContext和SparkSession对象。这样就可以在Shell中输入Scala代码来执行Spark操作。

除了基本的启动方式外,还可以通过指定一些参数来定制Spark Shell的行为。例如,可以使用--master参数来指定Spark集群的地址,使用--executor-memory和--total-executor-cores参数来指定每个执行器的内存和整个集群使用的CPU核数。这些参数可以更好地控制Spark应用程序在集群上的执行。

需要注意的是,如果启动Spark Shell时没有指定master地址,那么Spark Shell将默认启动本地模式,即仅在本机上启动一个进程,而不与集群建立联系。这对于简单的测试和调试非常有用。本节采用本地模式启动。

3.4.1  RDD的创建

Spark可以从Hadoop支持的任何存储源中加载数据去创建RDD,包括本地文件系统和HDFS等文件系统。下面通过Spark中的SparkContext对象调用textFile()方法来加载数据并创建RDD。

(1)从文件系统中加载数据并创建RDD:

scala> val test=sc.textFile("file:///export/data/test.txt")

test: org.apache.spark.rdd.RDD[String]=file:///export/data/test.txt MapPartitionsRDD[1] at textFile  at <console>:24

(2)从HDFS中加载数据并创建RDD:

scala> val testRDD=sc.textFile("/data/test.txt")

testRDD:org.apache.spark.rdd.RDD[String]=/data/test.txt MapPartitionsRDD[1] at textFile at  <console>:24

Spark还可以通过并行集合创建RDD,即在一个已经存在的集合数组上,通过SparkContext对象调用parallelize()方法来创建RDD:

scala> val array=Array(1,2,3,4,5)

array: Array[Int]=Array(1,2,3,4,5)

scala> val arrRDD=sc.parallelize(array)

arrRDD: org.apache.spark.rdd.RDD[Int]=ParallelcollectionRDD[6] at parallelize at <console>:26

3.4.2  RDD的处理过程

Spark用Scala语言实现了RDD的API,开发者可以通过调用这些API对RDD进行操作。RDD每完成一次转换操作,都会生成新的RDD,以供下一次“转换”操作使用。当最后一个RDD遇到“行动”操作时,Spark会根据所有转换操作的依赖关系进行计算,并将最终结果输出到外部数据源,如HDFS、数据库或文件系统等。如果在处理过程中需要复用中间数据结果,可以使用缓存机制将数据暂存于内存中,以提高后续操作的效率。整个处理过程如图3-5所示。

图3-5  RDD的处理过程


http://www.kler.cn/a/409251.html

相关文章:

  • 实验二 系统响应及系统稳定性
  • 近源渗透|HID ATTACK从0到1
  • 3349、检测相邻递增子数组 Ⅰ
  • 标贝科技大模型声音复刻 快速获取高品质专属AI声音
  • 【时时三省】NIT计算机考试基础知识
  • C++特殊类设计(不能被拷贝的类、只能在堆上创建对象的类、不能被继承的类、单例模式)
  • Jedis存储一个-以String的形式的对象到Redis
  • 【Go】-go中的锁机制
  • 【MATLAB源码-第218期】基于matlab的北方苍鹰优化算法(NGO)无人机三维路径规划,输出做短路径图和适应度曲线.
  • MySQL中的ROW_NUMBER窗口函数简单了解下
  • 【网络安全设备系列】3、IPS(入侵防御系统)
  • OpenCV4.9 dnn人脸识别
  • Linux的开发工具(三)
  • 设计模式之 命令模式
  • C++不完整类型(Incomplete Type)的检测与避免
  • Spring Boot 3.x + OAuth 2.0:构建认证授权服务与资源服务器
  • 浅谈TLP184小型平面光耦
  • docker 卸载与安装
  • 生成对抗网络模拟缺失数据,辅助PAMAP2数据集仿真实验
  • HTML 表单实战:从创建到验证
  • C#里怎么样实现自己的类满足for-each循环访问?
  • 计算机网络socket编程(2)_UDP网络编程实现网络字典
  • Qt实现可拖拽的矩形
  • 小程序-基于java+SpringBoot+Vue的开放实验室预约管理系统设计与实现
  • Express编写中间件
  • OAuth2资源服务器白名单接口带token被拦截