rdd

spark RDD基础装换操作--randomSplit操作

删除回忆录丶 提交于 2020-01-30 13:41:44
12.randomSplit操作 将由数字1~10组成的RDD,用randomSplit操作拆分成3个RDD。 scala> val rddData1 = sc.parallelize(1 to 10,3) rddData1: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[28] at parallelize at <console>:24 scala> val splitRDD = rddData1.randomSplit(Array(1,4,5)) splitRDD: Array[org.apache.spark.rdd.RDD[Int]] = Array(MapPartitionsRDD[29] at randomSplit at <console>:26, MapPartitionsRDD[30] at randomSplit at <console>:26, MapPartitionsRDD[31] at randomSplit at <console>:26) scala> splitRDD(0).collect res9: Array[Int] = Array(3) scala> splitRDD(1).collect res10: Array[Int] = Array(2, 7) scala>

RDD编程学习笔记3_数据读写

非 Y 不嫁゛ 提交于 2020-01-30 04:52:23
本地读取 scala > var textFile = sc.textFile ( "file:///root/1.txt" ) textFile: org.apache.spark.rdd.RDD [ String ] = file:///root/1.txt MapPartitionsRDD [ 57 ] at textFile at < console > :24 scala > textFile.saveAsTextFile ( "file:///root/writeback" ) scala > textFile.foreach ( println ) hadoop hello bianhao shan nihao hello shan hello bianhao nihao lizhao hello json文件读取以及解析 json文件读取 ############ 在hdfs读取json文件也是同理的 ########### scala > val jsonStr = sc.textFile ( "file:///usr/local/soft/spark-2.1.0-bin-without-hadoop/examples/src/main/resources/people.json" ) jsonStr: org.apache.spark.rdd.RDD [

RDD编程学习笔记2_键值对RDD_综合案例-计算每种图书的每天平均销量

不羁的心 提交于 2020-01-29 16:03:18
常见操作 reduceByKey和groupByKey的区别 groupByKey只做分组,不会进行汇总 reduceByKey会进行汇总求和(写过map,reduce函数框架的话应该很好理解) groupByKey可以通过利用Iterable的容器函数达到一些reduceByKey的效果 以下三种操作是等价的 ########## 起始操作 ############# scala > val words = Array ( "One" , "Two" , "Two" , "Three" , "Three" , "Three" ) words: Array [ String ] = Array ( One, Two, Two, Three, Three, Three ) scala > val wordRdd = sc.parallelize ( words ) .map ( word = > ( word,1 )) wordRdd: org.apache.spark.rdd.RDD [ ( String, Int ) ] = MapPartitionsRDD [ 40 ] at map at < console > :26 ########## 3种求和方式 ########### scala > val word_add = wordRdd.reduceByKey ( _+_

Spark之 RDD

雨燕双飞 提交于 2020-01-29 11:26:05
简介 RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变、可分区、里面的元素可并行计算的集合。   Resilient:弹性,它表示的含义rdd的数据是可以保存在内存中或者是磁盘中。   Distributed:它的数据是分布式存储的,后期方便于进行分布式计算。   Dataset:它就是一个集合,集合里面可以存放了很多个元素。 RDD的属性 1 A list of partitions 一个分区列表,在这里表示一个rdd中有很多个分区(partitions),Spark任务的计算以分区为单位,每一个分区就是一个task。读取hdfs上文件产生的RDD分区数跟文件的block个数相等 rdd1=sc.textFile("/words.txt") 2 A function for computing each split Spark中RDD的计算是以分区为单位的,每个RDD都会实现compute函数以达到这个目的。compute函数会对迭代器进行复合,不需要保存每次计算的结果。 3 A list of dependencies on other RDDs 一个RDD会依赖于其他多个RDD,这里就涉RDD之间的依赖关系,RDD的每次转换都会生成新的RDD,Spark任务的容错机制就是根据这个特性而来

Spark RDD理解

元气小坏坏 提交于 2020-01-28 17:14:57
目录 ----RDD简介 ----RDD操作类别 ----RDD分区 ----宽依赖和窄依赖作用 ----RDD分区划分器 ----RDD到调度 返回顶部 RDD简介 RDD是弹性分布式数据集(Resilient Distributed Dataset),能在并行计算阶段进行高效的数据共享;RDD还提供了一种粗粒度接口,该接口会将相同的操作应用到多个数据集上并记录创建数据集的‘血统’,从而在不需要存储真正的数据的情况下,达到高效的容错性。 返回顶部 RDD操作类别 RDD操作大致可分为四类:创建操作、转换操作、控制操作、行动操作;在这些大类的基础上还能划为些细类,下面是大部分的RDD操作,以及其细类划分情况。   返回顶部 RDD分区 分区的多少决定RDD的并行粒度;分区是逻辑概念,分区前后可能存储在同一内存;RDD分区之间存在依赖关系,分为宽依赖和窄依赖 宽依赖:多个子RDD分区依赖一个父RDD分区;如join,groupBy操作; 窄依赖:窄依赖:每个父RDD的分区都至多被被一个子RDD的分区使用;如map操作一对一关系 返回顶部 宽依赖和窄依赖作用 窄依赖允许在单个集群节点上流水线式执行,这个节点可以计算所有父级分区;而且,在窄依赖中,节点失败后的恢复更加高效 宽依赖的继承关系中,单个失败节点可能导致一个RDD的所有祖先RDD中的一些分区丢失,导致计算重新执行 返回顶部

【Spark】RDD详解

情到浓时终转凉″ 提交于 2020-01-28 13:52:26
RDD基础概念: RDD:弹性分布式数据集,逻辑上对数据划分,是不可变的,可分区的,供并行化计算的集合。具有以下特点: 1)RDD由逻辑上的分区组成,分区数据分布在各个节点,每个分区数据可以并行计算。 2)基于“lineage”的高效容错,即编号n的节点故障,可以从编号n-1的节点进行恢复。容错性还要考虑宽/窄依赖。 3)RDD数据在内存与磁盘之间的切换,数据的持久化与内存或者磁盘。checkpoint存储血缘关系 4)数据分片弹性,可以根据需要手动设置分区 RDD分区 1)RDD被划分成很多分区分布在集群中,分区数量决定了并行计算的粒度。 2)原文件是HDFS,RDD的分区数量与Block对应 3)RDD首选位置:考虑数据与计算的关系。如果RDD的分区首选位置是HDFS块所在的位置;当RDD被缓存时,计算会被发送到缓存所在的节点 RDD依赖关系 宽窄依赖是RDD操作的一种依赖关系,判断是否发生Shuffle的标志,划分stage的依据。 宽依赖(Shuffle Dependency):多个子RDD分区依赖一个父RDD分区,例如join操作。 窄依赖(Narrow Dependency):每个父RDD分区最多只被一个子RDD分区依赖,例如map操作,父RDD已被hash策略划分过。 若是协同划分,两个父RDD之间,父RDD与子RDD之间形成的一致性分区安排

Spark Core——day1

一笑奈何 提交于 2020-01-28 08:14:18
spark特点 分布式(分开存储) 主要基于内存(少数情况基于磁盘)(存储位置) 迭代式计算(可以分为多个阶段,而MapReduce只有map和reduce两个阶段,所有计算操作是针对多个节点上的数据进行并行操作的) RDD RDD,即弹性分布式数据集,是Spark提供的核心抽象。 是一种元素集合。被分为多个分区,每个分区分布在集群中的不同节点上,从而RDD中数据可以被并行操作。 通常通过HDFS或Hive表进行创建,也可用程序中的集合进行创建。 最重要特性:容错性,可以自动从节点失败中恢复。即若某节点上的RDD partition(分区)因为节点故障导致数据丢失,则RDD会通过自己的数据重新计算该partition。该过程对使用者透明。 数据默认放在内存中,当内存不足则写入磁盘 Spark 开发 核心开发:离线批处理/延迟性的交互式数据处理 数据 计算 循环 保存 SQL查询(底层是RDD和计算) 实时计算(底层是RDD和计算) wordcount程序 java 配置maven环境 pom.xml 中添加依赖和插件 如何本地测试 public class WordCountLocal{ public static void main(String[] args){ // 第一步,创建SparkConf对象,设置Spark应用的配置信息 // 使用setMaster(

Spark基础 DAG

淺唱寂寞╮ 提交于 2020-01-28 07:04:10
为什么使用spark的原因是早期的编程模式MapReduce缺乏对数据共享的高效元语,会造成磁盘I/O 以及序列号等开销,spark提出了统一的编程抽象---弹性分布式数据集(RDD),该模型可以令并行计算阶段间高效地进行数据共享。spark处理数据时,会将计算转化为一个有向无环图(DAG)的任务集,RDD能够有效的恢复DAG中故障和慢节点执行的任务,并且RDD提供一种基于粗粒度变换的接口,记录创建数据集的“血统”,能够实现高效的容错性。 spark的作业和任务调度系统是其核心,它能够有效的进行调度的根本原因是因为对任务划分DAG和容错。 DAG,有向无环图,Directed Acyclic Graph的缩写,常用于建模。Spark中使用DAG对RDD的关系进行建模,描述了RDD的依赖关系,这种关系也被称之为lineage,RDD的依赖关系使用Dependency维护,参考Spark RDD之Dependency,DAG在Spark中的对应的实现为DAGScheduler。 基础概念 介绍DAGScheduler中的一些概念,有助于理解后续流程。 作业(Job) 调用RDD的一个action,如count,即触发一个Job,spark中对应实现为ActiveJob,DAGScheduler中使用集合activeJobs和jobIdToActiveJob维护Job 调度阶段

Apache Spark : RDD

佐手、 提交于 2020-01-28 03:45:37
Resilient Distributed Datasets Resilient Distributed Datasets ( RDD ) is a fundamental data structure of Spark. It is an immutable distributed collection of objects. Each dataset in RDD is divided into logical partitions, which may be computed on different nodes of the cluster. RDDs can contain any type of Python, Java, or Scala objects, including user-defined classes. Formally, an RDD is a read-only, partitioned collection of records. RDDs can be created through deterministic operations on either data on stable storage or other RDDs. RDD is a fault-tolerant collection of elements that can be

Spark RDD编程核心

≯℡__Kan透↙ 提交于 2020-01-26 20:32:57
一句话说,在Spark中对数据的操作其实就是对RDD的操作,而对RDD的操作不外乎创建、转换、调用求值。 什么是RDD   RDD(Resilient Distributed Dataset),弹性分布式数据集。   它定义了如何在集群的每个节点上操作数据的一系列命令,而不是指真实的数据,Spark通过RDD可以对每个节点的多个分区进行并行的数据操作。   之所以称弹性,是因为其有高容错性。默认情况下,Spark会在每一次行动操作后进行RDD重计算,如想在多个行动操作中使用RDD,可以将其缓存(以分区的方式持久化)到集群中每台机器的内存或者磁盘中。当一台机器失效无法读取RDD数据时,可通过此特性重算丢掉的分区,从而恢复数据,此过程对用户透明。    如何创建RDD   可通过以下几种方式创建RDD: 通过读取外部数据集 (本地文件系统/HDFS/...) 通过读取集合对象 (List/Set/...) 通过已有的RDD生成新的RDD     Spark对RDD操作方式   Spark对RDD的操作分两种,即转换操作(Transformation)和行动操作(Action)。 转换操作:不触发实际计算,返回一个新的RDD,例如对数据的匹配操作map和过滤操作filter, 惰性求值 。 行动操作:会触发实际计算,会向驱动器返回结果或将结果写到外部系统。   如何区别两种操作?