RDD编程–创建RDD

概述

Spark 围绕弹性分布式数据集(RDD)的概念展开,RDD 是可以并行操作的元素的容错集合。创建 RDD 有两种方法: 在驱动程序中并行化现有集合,或引用外部存储系统中的数据集,例如共享文件系统、HDFS、HBase 或任何提供 Hadoop InputFormat 的数据源。

并行集合

并行化集合是通过在驱动程序(Scala )中的现有集合上调用SparkContext的parallelize方法来创建的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。

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

scala> val distFile = sc.textFile("data.txt")
distFile: org.apache.spark.rdd.RDD[String] = data.txt MapPartitionsRDD[10] at textFile at <console>:26

创建后,distFile可以通过数据集操作对其进行操作。例如,我们可以添加最多使用的所有行的大小map和reduce操作如下:distFile.map(s => s.length).reduce((a, b) => a + b)。

注意事项

使用 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,使用 SparkContext 的sequenceFile[K,V]方法,其中K和V是文件中键和值的类型。这些应该是 Hadoop的Writable接口的子类,如IntWritable和Text。此外,Spark 允许您为一些常见的 Writable指定本机类型;例如,sequenceFile[Int, String]会自动读取 IntWritables 和 Texts。
  • 对于其他 Hadoop InputFormats,您可以使用该SparkContext.hadoopRDD方法,该方法采用任意JobConf输入格式类、键类和值类。以与使用输入源的Hadoop 作业相同的方式设置这些。您还可以使用SparkContext.newAPIHadoopRDD基于“新”MapReduceAPI ( org.apache.hadoop.mapreduce) 的InputFormats 。
  • RDD.saveAsObjectFile并SparkContext.objectFile支持以由序列化的 Java 对象组成的简单格式保存
    RDD。虽然这不如 Avro 这样的专用格式有效,但它提供了一种保存任何 RDD 的简单方法。

RDD编程--创建RDD相关推荐

  1. Spark 基础 —— RDD(创建 RDD)的两种方式

    弹性分布式数据集(Resilient Distributed Dataset),简称 RDD,RDD 是 Spark 所提供的最基本的数据抽象,代表分布在集群中多台机器上的对象集合.Spark 有两种 ...

  2. 学习笔记Spark(四)—— Spark编程基础(创建RDD、RDD算子、文件读取与存储)

    文章目录 一.创建RDD 1.1.启动Spark shell 1.2.创建RDD 1.2.1.从集合中创建RDD 1.2.2.从外部存储中创建RDD 任务1: 二.RDD算子 2.1.map与flat ...

  3. Spark入门系列(二)| 1小时学会RDD编程

    作者 | 梁云1991 转载自Python与算法之美(ID:Python_Ai_Road) 导读:本文为 Spark入门系列的第二篇文章,主要介绍 RDD 编程,实操性较强,感兴趣的同学可以动手实现一 ...

  4. 十、 RDD编程和Spark SQL

    @Author : By Runsen @Date : 2020/6/21 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘 ...

  5. Java Spark之创建RDD的两种方式和操作RDD

    首先看看思维导图,我的spark是1.6.1版本,jdk是1.7版本 spark是什么?  Spark是基于内存计算的大数据并行计算框架.Spark基于内存计算,提高了在大数据环境下数据处理的实时性, ...

  6. 02、体验Spark shell下RDD编程

    02.体验Spark shell下RDD编程 1.Spark RDD介绍 RDD是Resilient Distributed Dataset,中文翻译是弹性分布式数据集.该类是Spark是核心类成员之 ...

  7. (精华)转:RDD:创建的几种方式(scala和java)

    转: https://blog.csdn.net/weixin_38750084/article/details/82769600 这篇文章非常棒, 用代码实际演示了如何创建RDD: 本文主要转载了 ...

  8. Spark基础学习笔记16:创建RDD

    文章目录 零.本讲学习目标 一.RDD为何物 (一)RDD概念 (二)RDD示例 (三)RDD主要特征 二.做好准备工作 (一)准备文件 1.准备本地系统文件 2.准备HDFS系统文件 (二)启动Sp ...

  9. 【极简spark教程】RDD编程

    目录 入门 RDD编程指引 创建rdd集合,可以将rdd看做是spark分布式环境下的list 读取文件 RDD操作 转换transform:生成了新的RDD 行动action:汇总所有结果返回驱动程 ...

最新文章

  1. mysql ib_logfile 数量_Mysql 事务日志(Ib_logfile)
  2. python修改类的属性值_python 四种方法修改类变量,实例对象调用类方法改变类属性的值,类对象调用类方法改变类属性的值,调用实例方法改变类属性的值,直接修改类属性的值...
  3. mysql 二进制 存储格式化_解析MYSQL BINLOG 二进制格式(2)--FORMAT_DESCRIPTION_EVENT
  4. airflow 進行後端大數據中ETL處理(草稿)
  5. centos7.0上安装五笔输入法
  6. python安卓脚本精灵使用教程_【按键精灵教程】自动安装apk还可以这么用!
  7. 在知网下载硕士的论文PDF格式无需安装CAJ软件
  8. C语言单片机笔试题,c语言面试题集(单片机
  9. python time和datetime、pytz
  10. mac mysql 移动硬盘_mac挂载移动硬盘可以读写的方法
  11. 户外广告牌新标准将规定字体、颜色
  12. CentOS7.5下载及安装过程
  13. 2017年美国计算机科学,2017年U.S.News美国大学研究生计算机科学专业排名TOP10
  14. 威纶通,威纶通UI,WEINVIEW UI,HMI 模板,人机界面模板,WEINVIEW
  15. k型热电偶材料_k型热电偶工作原理及详细参数
  16. Weisfeiler-Lehman(WL)算法和WL Test的学习笔记
  17. 华为开发者联盟 -- 测试中心
  18. 不到一年就被百度资讯流超过?!今日头条还能坚持不站队吗?
  19. 郑州大学“战疫杯”大学生程序设计在线邀请赛(1)(C++题解+详细思路)2022年5月9日
  20. 通达信三重滤网交易系统指标公式(含强力指数指标)

热门文章

  1. 幼儿园监控/透明装饰/安全工地/放心食堂/多媒体教室基于视频流媒体能力解决方案
  2. ZAC深度解析:区块链技术如何重塑汽车后市场?
  3. 20161128 已知小明同学其中考试成绩,数学97.5分,语文94.5分,英语95.5分,求小明同学的三科总成绩(结果保留一位小数)。...
  4. 计算机视觉(特征检测)- DoG 和 SIFT 进行特征提取描述
  5. iOS10 Siri开发介绍篇
  6. Brave vs Google Chrome:哪个浏览器更适合你?
  7. 制造业信息化的长治久安之计--Agentflow解决方案简介
  8. GEA 3.2 C/C++ 的数据、代码及内存
  9. 网络的FIN_WAIT_2状态解释和分析
  10. 扫地机器人划伤地板_使用扫地机器人地板会被破坏吗