前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spark Core快速入门系列(2) | Spark Core中编程模型的理解与RDD的创建

Spark Core快速入门系列(2) | Spark Core中编程模型的理解与RDD的创建

作者头像
不温卜火
发布2020-10-28 17:01:17
6180
发布2020-10-28 17:01:17
举报
文章被收录于专栏:不温卜火不温卜火

上一篇博客什么是RDD?一文带你快速了解Spark中RDD的概念!为大家带来了RDD的概述之后。本篇博客,博主将继续前进,为大家带来RDD编程系列。

该系列第一篇,为大家带来的是编程模型的理解与RDD的创建!

一. RDD 编程模型

  在 Spark 中,RDD 被表示为对象,通过对象上的方法调用来对 RDD 进行转换。   经过一系列的transformations定义 RDD 之后,就可以调用 actions 触发 RDD 的计算   action可以是向应用程序返回结果(count, collect等),或者是向存储系统保存数据(saveAsTextFile等)。   在Spark中,只有遇到action,才会执行 RDD 的计算(即延迟计算),这样在运行时可以通过管道的方式传输多个转换。   要使用 Spark,开发者需要编写一个 Driver 程序,它被提交到集群以调度运行 Worker   Driver 中定义了一个或多个 RDD,并调用 RDD 上的 action,Worker 则执行 RDD 分区计算任务。

3
3
4
4

二. RDD的创建

  在Spark中创建RDD的创建方式可以分为三种:

  • 从集合中创建RDD;
  • 从外部存储创建RDD;
  • 从其他RDD创建。

2.1 从集合中创建 RDD

  • 1. 使用parallelize函数创建
代码语言:javascript
复制
scala> val arr = Array(10,20,30,40,50,60)
arr: Array[Int] = Array(10, 20, 30, 40, 50, 60)

scala> val rdd1 = sc.parallelize(arr)
rdd1: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[0] at parallelize at <console>:26
  • 2. 使用makeRDD函数创建

makeRDD和parallelize是一样的.

代码语言:javascript
复制
scala> val rdd1 = sc.makeRDD(Array(10,20,30,40,50,60))
rdd1: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[0] at makeRDD at <console>:24

说明:

  • 一旦 RDD 创建成功, 就可以通过并行的方式去操作这个分布式的数据集了.
  • parallelizemakeRDD还有一个重要的参数就是把数据集切分成的分区数.
  • Spark 会为每个分区运行一个任务(task). 正常情况下, Spark 会自动的根据你的集群来设置分区数

2.2 从外部存储创建 RDD

  Spark 也可以从任意 Hadoop 支持的存储数据源来创建分布式数据集.   可以是本地文件系统, HDFS, Cassandra, HVase, Amazon S3 等等.   Spark 支持 文本文件, SequenceFiles, 和其他所有的 Hadoop InputFormat.

代码语言:javascript
复制
scala> var distFile = sc.textFile("words.txt")
distFile: org.apache.spark.rdd.RDD[String] = words.txt MapPartitionsRDD[1] at textFile at <console>:24

scala> distFile.collect
res0: Array[String] = Array(buwenbuhuo hello, hello world, how are you, zbc ltgb)

说明:

  • 1 url可以是本地文件系统文件, hdfs://..., s3n://...等等
  • 2 如果是使用的本地文件系统的路径, 则必须每个节点都要存在这个路径
  • 3 所有基于文件的方法, 都支持目录, 压缩文件, 和通配符(*). 例如: textFile("/my/directory"),textFile("/my/directory/*.txt"), and textFile("/my/directory/*.gz").
  • 4 textFile还可以有第二个参数, 表示分区数. 默认情况下, 每个块对应一个分区.(对 HDFS 来说, 块大小默认是128M). 可以传递一个大于块数的分区数, 但是不能传递一个比块数小的分区数.
  • 5 关于读取文件和保存文件的其他知识, 后面会专门介绍介绍.

2.3 从其他 RDD 转换得到新的 RDD

  就是通过 RDD 的各种转换算子来得到新的 RDD.

  本次的分享就到这里了

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-07-22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一. RDD 编程模型
  • 二. RDD的创建
    • 2.1 从集合中创建 RDD
      • 2.2 从外部存储创建 RDD
        • 2.3 从其他 RDD 转换得到新的 RDD
        相关产品与服务
        对象存储
        对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档