Spark官方文档-SparkCore

2024-03-04 20:32
文章标签 文档 官方 spark sparkcore

本文主要是介绍Spark官方文档-SparkCore,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

快速开始

RDD

1.Spark 的主要抽象是一个分布式弹性数据集(RDD),可以从 Hadoop InputFormats(例如 HDFS 文件)或通过转换其他RDD来创建RDD。

val textFile = spark.read.textFile("README.md")

2.可以通过调用某些操作直接从 RDD中获取值,或者转换RDD以获得新的值

 textFile.count() 
textFile.first() // First item in this Dataset

3.将此数据集转换为新的数据集。我们调用filter返回一个包含文件中RDD子集的新数据集。

val linesWithSpark = textFile.filter(line => line.contains("Spark"))

 

更多关于数据集操作

1.找到单词最多的那一行:

先计算每行单词数;reduce在该数据集上调用以查找最大字数;

textFile.map(line => line.split(" ").size).reduce((a, b) => if (a > b) a else b)
textFile.map(line => line.split(" ").size).reduce((a, b) => Math.max(a, b))

 

 

RDD

初始化 Spark

Spark 程序必须做的第一件事是创建一个SparkContext对象,它告诉 Spark 如何访问集群。要创建一个,SparkContext您首先需要构建一个SparkConf对象,该对象包含有关您的应用程序的信息。每个 JVM 应该只有一个 SparkContext 处于活动状态。stop()在创建新的之前,您必须激活 SparkContext。

val conf = new SparkConf().setAppName(appName).setMaster(master)
new SparkContext(conf)

appName参数是您的应用程序在集群 UI 上显示的名称。 master是一个Spark、Mesos 或 YARN 集群 URL,或者一个特殊的“本地”字符串以在本地模式下运行。 

Using the Shell

$ ./bin/spark-shell --master local[4] --jars code.jar

弹性分布式数据集 (RDD)

Spark 围绕弹性分布式数据集(RDD)的概念展开,RDD 是可以并行操作的元素的容错集合。

有两种方法可以创建 RDD: 在驱动程序中并行化现有集合,或引用外部存储系统中的数据集,例如共享文件系统、HDFS、HBase 或任何提供 Hadoop InputFormat 的数据源。

并行集合

并行化集合是通过在驱动程序(Scala )中的现有集合上调用SparkContextparallelize方法来创建的Seq。集合的元素被复制以形成可以并行操作的分布式数据集。例如,这里是如何创建一个包含数字 1 到 5 的并行化集合:

val data = Array(1, 2, 3, 4, 5)
val distData = sc.parallelize(data)

创建后,distData可以并行操作分布式数据集 ( )。例如,我们可能会调用distData.reduce((a, b) => a + b)将数组的元素相加。稍后我们将描述分布式数据集上的操作。

并行集合的一个重要参数是将数据集切割成的分区。Spark 将为集群的每个分区运行一个任务。通常,集群中的每个 CPU 需要 2-4 个分区。通常,Spark 会尝试根据您的集群自动设置分区数。但是,您也可以通过将其作为第二个参数传递给parallelize(例如sc.parallelize(data, 10))来手动设置它。注意:代码中的某些地方使用术语切片(分区的同义词)来保持向后兼容性。

外部数据集

Spark 可以从 Hadoop 支持的任何存储源创建分布式数据集,包括本地文件系统、HDFS、Cassandra、HBase、Amazon S3等。Spark 支持文本文件、SequenceFiles和任何其他 Hadoop InputFormat

可以使用SparkContexttextFile方法创建文本文件 RDD 。此方法需要一个URI的文件(本地路径的机器上,或一个hdfs://s3a://等URI),并读取其作为行的集合。这是一个示例调用:

val distFile = sc.textFile("data.txt")

使用 Spark 读取文件的一些注意事项:

  • 如果使用本地文件系统上的路径,则该文件也必须可以在所有工作节点上的相同路径上访问。要么将文件复制到所有工作节点,要么使用网络安装的共享文件系统。

  • Spark 的所有基于文件的输入方法,包括textFile,都支持在目录、压缩文件和通配符上运行。例如,你可以使用textFile("/my/directory")textFile("/my/directory/*.txt")textFile("/my/directory/*.gz")。当读取多个文件时,分区的顺序取决于文件从文件系统返回的顺序。例如,它可能会也可能不会遵循文件的字典顺序(按路径)。在分区内,元素根据它们在底层文件中的顺序进行排序。

  • textFile方法还采用可选的第二个参数来控制文件的分区数。默认情况下,Spark 为文件的每个块创建一个分区(在 HDFS 中默认块为 128MB),但您也可以通过传递更大的值来请求更多的分区。请注意,分区数不能少于块数

 

除了文本文件,Spark 的 Scala API 还支持其他几种数据格式:

  • SparkContext.wholeTextFiles允许您读取包含多个小文本文件的目录,并将每个文件作为(文件名、内容)的二元组对返回。与textFile对比,后者将在每个文件中的每行的一条记录返回。分区由数据本地性决定,在某些情况下,这可能导致分区太少(本地数据较少)。对于这些情况,wholeTextFiles提供可选的第二个参数来控制最小分区数。

  • 对于SequenceFiles(K,V存储格式的文件),使用 SparkContext 的sequenceFile[K, V]方法,其中KV是文件中键和值的类型。这些应该是 Hadoop 的Writable接口的子类,如IntWritableText。此外,Spark 允许您为一些常见的 Writable 指定基础类型;例如,sequenceFile[Int, String]会自动读取 IntWritables 和 Texts。

  • 对于其他 Hadoop InputFormats,您可以使用该SparkContext.hadoopRDD方法,该方法采用任意JobConf输入格式类、键类和值类。以与使用输入源的 Hadoop 作业相同的方式设置这些。您还可以使用SparkContext.newAPIHadoopRDD基于“新”MapReduce API ( org.apache.hadoop.mapreduce) 的InputFormats 。

  • RDD.saveAsObjectFileSparkContext.objectFile支持,用序列化的 Java 对象,这种简单格式来组成RDD,并用来保存RDD。虽然这不如 Avro 之类的专用格式有效,但它提供了一种保存任何 RDD 的简单方法。

 

RDD 操作

RDD 支持两种类型的操作:

transforms(转换)它从现有的数据集创建一个新的数据集

actions(行动),它在对数据集运行

这篇关于Spark官方文档-SparkCore的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/774351

相关文章

C#实现一键批量合并PDF文档

《C#实现一键批量合并PDF文档》这篇文章主要为大家详细介绍了如何使用C#实现一键批量合并PDF文档功能,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言效果展示功能实现1、添加文件2、文件分组(书签)3、定义页码范围4、自定义显示5、定义页面尺寸6、PDF批量合并7、其他方法

Java实现在Word文档中添加文本水印和图片水印的操作指南

《Java实现在Word文档中添加文本水印和图片水印的操作指南》在当今数字时代,文档的自动化处理与安全防护变得尤为重要,无论是为了保护版权、推广品牌,还是为了在文档中加入特定的标识,为Word文档添加... 目录引言Spire.Doc for Java:高效Word文档处理的利器代码实战:使用Java为Wo

使用Python实现Word文档的自动化对比方案

《使用Python实现Word文档的自动化对比方案》我们经常需要比较两个Word文档的版本差异,无论是合同修订、论文修改还是代码文档更新,人工比对不仅效率低下,还容易遗漏关键改动,下面通过一个实际案例... 目录引言一、使用python-docx库解析文档结构二、使用difflib进行差异比对三、高级对比方

Python自动化处理PDF文档的操作完整指南

《Python自动化处理PDF文档的操作完整指南》在办公自动化中,PDF文档处理是一项常见需求,本文将介绍如何使用Python实现PDF文档的自动化处理,感兴趣的小伙伴可以跟随小编一起学习一下... 目录使用pymupdf读写PDF文件基本概念安装pymupdf提取文本内容提取图像添加水印使用pdfplum

Python从Word文档中提取图片并生成PPT的操作代码

《Python从Word文档中提取图片并生成PPT的操作代码》在日常办公场景中,我们经常需要从Word文档中提取图片,并将这些图片整理到PowerPoint幻灯片中,手动完成这一任务既耗时又容易出错,... 目录引言背景与需求解决方案概述代码解析代码核心逻辑说明总结引言在日常办公场景中,我们经常需要从 W

C#高效实现Word文档内容查找与替换的6种方法

《C#高效实现Word文档内容查找与替换的6种方法》在日常文档处理工作中,尤其是面对大型Word文档时,手动查找、替换文本往往既耗时又容易出错,本文整理了C#查找与替换Word内容的6种方法,大家可以... 目录环境准备方法一:查找文本并替换为新文本方法二:使用正则表达式查找并替换文本方法三:将文本替换为图

Python批量替换多个Word文档的多个关键字的方法

《Python批量替换多个Word文档的多个关键字的方法》有时,我们手头上有多个Excel或者Word文件,但是领导突然要求对某几个术语进行批量的修改,你是不是有要崩溃的感觉,所以本文给大家介绍了Py... 目录工具准备先梳理一下思路神奇代码来啦!代码详解激动人心的测试结语嘿,各位小伙伴们,大家好!有没有想

Python调用LibreOffice处理自动化文档的完整指南

《Python调用LibreOffice处理自动化文档的完整指南》在数字化转型的浪潮中,文档处理自动化已成为提升效率的关键,LibreOffice作为开源办公软件的佼佼者,其命令行功能结合Python... 目录引言一、环境搭建:三步构建自动化基石1. 安装LibreOffice与python2. 验证安装

Python操作PDF文档的主流库使用指南

《Python操作PDF文档的主流库使用指南》PDF因其跨平台、格式固定的特性成为文档交换的标准,然而,由于其复杂的内部结构,程序化操作PDF一直是个挑战,本文主要为大家整理了Python操作PD... 目录一、 基础操作1.PyPDF2 (及其继任者 pypdf)2.PyMuPDF / fitz3.Fre

springboot自定义注解RateLimiter限流注解技术文档详解

《springboot自定义注解RateLimiter限流注解技术文档详解》文章介绍了限流技术的概念、作用及实现方式,通过SpringAOP拦截方法、缓存存储计数器,结合注解、枚举、异常类等核心组件,... 目录什么是限流系统架构核心组件详解1. 限流注解 (@RateLimiter)2. 限流类型枚举 (