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

相关文章

使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)

《使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)》PPT是一种高效的信息展示工具,广泛应用于教育、商务和设计等多个领域,PPT文档中常常包含丰富的图片内容,这些图片不仅提升了... 目录一、引言二、环境与工具三、python 提取PPT背景图片3.1 提取幻灯片背景图片3.2 提取

Android实现在线预览office文档的示例详解

《Android实现在线预览office文档的示例详解》在移动端展示在线Office文档(如Word、Excel、PPT)是一项常见需求,这篇文章为大家重点介绍了两种方案的实现方法,希望对大家有一定的... 目录一、项目概述二、相关技术知识三、实现思路3.1 方案一:WebView + Office Onl

Python实现word文档内容智能提取以及合成

《Python实现word文档内容智能提取以及合成》这篇文章主要为大家详细介绍了如何使用Python实现从10个左右的docx文档中抽取内容,再调整语言风格后生成新的文档,感兴趣的小伙伴可以了解一下... 目录核心思路技术路径实现步骤阶段一:准备工作阶段二:内容提取 (python 脚本)阶段三:语言风格调

使用Java将DOCX文档解析为Markdown文档的代码实现

《使用Java将DOCX文档解析为Markdown文档的代码实现》在现代文档处理中,Markdown(MD)因其简洁的语法和良好的可读性,逐渐成为开发者、技术写作者和内容创作者的首选格式,然而,许多文... 目录引言1. 工具和库介绍2. 安装依赖库3. 使用Apache POI解析DOCX文档4. 将解析

Java利用docx4j+Freemarker生成word文档

《Java利用docx4j+Freemarker生成word文档》这篇文章主要为大家详细介绍了Java如何利用docx4j+Freemarker生成word文档,文中的示例代码讲解详细,感兴趣的小伙伴... 目录技术方案maven依赖创建模板文件实现代码技术方案Java 1.8 + docx4j + Fr

使用C#代码在PDF文档中添加、删除和替换图片

《使用C#代码在PDF文档中添加、删除和替换图片》在当今数字化文档处理场景中,动态操作PDF文档中的图像已成为企业级应用开发的核心需求之一,本文将介绍如何在.NET平台使用C#代码在PDF文档中添加、... 目录引言用C#添加图片到PDF文档用C#删除PDF文档中的图片用C#替换PDF文档中的图片引言在当

详解C#如何提取PDF文档中的图片

《详解C#如何提取PDF文档中的图片》提取图片可以将这些图像资源进行单独保存,方便后续在不同的项目中使用,下面我们就来看看如何使用C#通过代码从PDF文档中提取图片吧... 当 PDF 文件中包含有价值的图片,如艺术画作、设计素材、报告图表等,提取图片可以将这些图像资源进行单独保存,方便后续在不同的项目中使

Python实现合并与拆分多个PDF文档中的指定页

《Python实现合并与拆分多个PDF文档中的指定页》这篇文章主要为大家详细介绍了如何使用Python实现将多个PDF文档中的指定页合并生成新的PDF以及拆分PDF,感兴趣的小伙伴可以参考一下... 安装所需要的库pip install PyPDF2 -i https://pypi.tuna.tsingh

Python批量调整Word文档中的字体、段落间距及格式

《Python批量调整Word文档中的字体、段落间距及格式》这篇文章主要为大家详细介绍了如何使用Python的docx库来批量处理Word文档,包括设置首行缩进、字体、字号、行间距、段落对齐方式等,需... 目录关键代码一级标题设置  正文设置完整代码运行结果最近关于批处理格式的问题我查了很多资料,但是都没

Python自动化Office文档处理全攻略

《Python自动化Office文档处理全攻略》在日常办公中,处理Word、Excel和PDF等Office文档是再常见不过的任务,手动操作这些文档不仅耗时耗力,还容易出错,幸运的是,Python提供... 目录一、自动化处理Word文档1. 安装python-docx库2. 读取Word文档内容3. 修改