rdd

SparkCore常用算子

*爱你&永不变心* 提交于 2020-02-04 20:25:58
算子 描述 collect() 无参,以数组的形式返回RDD中的所有的元素:本质上:是将executor中运算得到的RDD—>拉取到Driver程序中来,形成Scala的集合 take(n) 返回RDD中的前n个元素,无参时,默认为前10个 takeOrdered(n, [ordering]) 和top类似,先排序(升序/降序),再取前n,不过获取的元素的顺序与top相反 takeSample(withReplacement, num, [seed]) 返回一个随机采样数组,该数组由从RDD中采样获得,可以选择是否用随机数来替换不足的部分,seed用于指定随机数生成器的种子 first() 返回RDD的第一个元素(并不一定是最大的,看RDD是否排序,类似于take(1)) top(n) 返回由RDD前n个最大的元素构成的数组(最大:元素具备可比性,默认取字典顺序最大的) reduce(func) 通过func函数来聚集RDD中的所有元素,且要求func必须满足:1.可交换;2.可并联。 reduceByKeyLocally(func:(V, V)=>V) 功能与reduceByKey相同,以key为组进行聚合,但是 唯一不同的是:该算子返回的是一个Map[K, V]的集合 sum() 只能作用于纯数值形式的RDD,返回元素的总和 count() 无参,()可以省略

sparkSQL中cache的若干问题

◇◆丶佛笑我妖孽 提交于 2020-02-03 15:42:33
摘要 sparkSQL在使用cache缓存的时候,有时候缓存可能不起作用,可能会发出缓存是假的吧的感慨。现在我们就把这个问题说道说道。 问题 场景描述 当我们通过spark进行统计和处理数据时,发现他是延迟计算的,如果一个应用中出现多个action,而这多个action处理同一个数据源数据时,数据源用时间来过滤数据时,由于有多个action操作,遇到每个action就是一个job,每一个action都会执行数据源获取数据的操作,由于两个action之间的操作存在时间差,这两个action获取的数据有可能不一致。 例如下例 test1表中的数据 1,2018-07-01 10:10:03 2,2018-07-01 11:12:04 代码如下操作 val odsData = spark.sql(""" select from default.test1 where time < "2018-07-02" """) val targetData = odsData.map(fun _) val targetData.createOrReplaceTempView("data1") //第一个Action操作 val spark.sql(""" insert overwrite table default.test2 * from data1 """) val targetData1 =

RDD操作

本秂侑毒 提交于 2020-02-03 14:59:05
RDD操作 RDD操作 1.对一个数据为{1,2,3,3}的RDD进行基本的RDD转化操作 函数名 目的 示例 结果 map() 函数应用于RDD中的每个元素 rdd.map(x=>x+1) {2,3,4,4} flatMap() 将函数应用于RDD中的每个怨毒,通常用来切分单词 rdd.flatMap(x=>x.to(3)) {1,2,3,2,3,3,3} filter() 返回一个通过传给filter()的函数的元素组成的RDD rdd.filter(x=>x!=1) {2,3,3} distinct() 去重 rdd.distinct() {1,2,3} sample(withReplacement,fraction,[seed]) 对RDD进行采样,以及是否替换 rdd.sample(false,0.5) 非确定 2.对数据分别为{1,2,3}和{3,4,5}的RDD进行针对两个RDD的转化操作 函数名 目的 示例 结果 union() 生成一个包含两个RDD中所有元素的RDD rdd.union(other) {1,2,3,3,4,5} intersection() 求两个RDD共同的元素RDD rdd.intersection(other) {3} subtract() 移除一个元素的内容 rdd.subtract(other) {1,2} cartesian()

RDD操作

时光毁灭记忆、已成空白 提交于 2020-02-03 14:58:35
RDD操作 1.对一个数据为{1,2,3,3}的RDD进行基本的R DD转化操作 函数名 目的 示例 结果 map() 函数应用于RDD中的每个元素 rdd.map(x=>x+1) {2,3,4,4} flatMap() 将函数应用于RDD中的每个怨毒,通常用来切分单词 rdd.flatMap(x=>x.to(3)) {1,2,3,2,3,3,3} filter() 返回一个通过传给filter()的函数的元素组成的RDD rdd.filter(x=>x!=1) {2,3,3} distinct() 去重 rdd.distinct() {1,2,3} sample(withReplacement,fraction,[seed]) 对RDD进行采样,以及是否替换 rdd.sample(false,0.5) 非确定 2.对数据分别为{1,2,3}和{3,4,5}的RDD进行针对两个RDD的转化操作 函数名 目的 示例 结果 union() 生成一个包含两个RDD中所有元素的RDD rdd.union(other) {1,2,3,3,4,5} intersection() 求两个RDD共同的元素RDD rdd.intersection(other) {3} subtract() 移除一个元素的内容 rdd.subtract(other) {1,2} cartesian()

RDD操作

我的未来我决定 提交于 2020-02-03 14:55:59
写了一个月spark,用了无数RDD操作,总结一下~ RDD Transform map(func) : 数据集中的每个元素经过用户自定义的函数转换形成一个新的RDD val rdd = sc.parallelize(1 to 5) val result = rdd.map(x => x to 3) 输出: Range(1, 2, 3) Range(2, 3) Range(3) Range() Range() flatmap(func) : 与map类似,但每个元素输入项都可以被映射到0个或多个的输出项,最终将结果”扁平化“后输出 val rdd = sc.parallelize(1 to 5) val result = rdd.flatMap(x => x to 3) 输出: 1 2 3 2 3 3 union( otherDataset ) : 将两个RDD中的数据集进行合并,最终返回两个RDD的并集,若RDD中存在相同的元素也不会去重 val rdd1 = sc.parallelize(1 to 3) val rdd2 = sc.parallelize(3 to 5) val result = rdd1.union(rdd2) 输出: 1 2 3 3 4 5 intersection(otherDataSet) : 返回两个RDD的交集 val rdd1 = sc

寒假记录3

柔情痞子 提交于 2020-02-03 14:28:29
今天的主要活动是完成了实验一Linux系统常用命令 Spark运行基本流程   (1)当一个 Spark Application 被提交时,首先需要为这个应用构建起基本的运行环境, 即由 Driver 创建一个 SparkContext进行资源的申请、任务的分配和监控。 SparkContext 会向资源管理器注册并申 请运行 Executor 的资源;   (2)资源管理器为 Executor 分配资源,并启动 Executor 进程, Executor 启动以后会不断向资源管理器汇报其运行情况   (3)SparkContext 根据 RDD 的依赖关系构建 DAG 图,DAG 图提交给 DAGScheduler 进行解析,将 DAG 图分解成 Stage,并且计算出各个 Stage 之间的依赖关系,( 每一个Stage阶段里面都会包含多个task,这些task构成一个taskset )然后把一个个 TaskSet 提交给底层任务调度器 TaskScheduler 进行处理; ( TaskScheduler拿到taskset以后要把任务分配给相关的Executor 进程去运行这些task,但是它不能随便分配 必须接到Executor申请才会分配 ) Executor 会向 SparkContext 申请 Task,Task

30.Spark SQL和DataFrame

有些话、适合烂在心里 提交于 2020-02-03 00:08:16
RDD转换为DataFrame 为什么要将RDD转换为DataFrame?因为这样的话,我们就可以直接针对HDFS等任何可以构建为RDD的数据,使用Spark SQL进行SQL查询了。 这个功能是无比强大的。想象一下,针对HDFS中的数据,直接就可以使用SQL进行查询。 Spark SQL支持两种方式来将RDD转换为DataFrame。 第一种方式,是使用反射来推断包含了特定数据类型的RDD的元数据。 这种基于反射的方式,代码比较简洁,当你已经知道你的RDD的元数据时,是一种非常不错的方式。 第二种方式,是通过编程接口来创建DataFrame,你可以在程序运行时动态构建一份元数据,然后将其应用到已经存在的RDD上。 这种方式的代码比较冗长,但是如果在编写程序时,还不知道RDD的元数据,只有在程序运行时,才能动态得知其元数据,那么只能通过这种动态构建元数据的方式。 Java 版本 :Spark SQL是支持将包含了JavaBean的RDD转换为DataFrame的。JavaBean的信息,就定义了元数据。 Spark SQL现在是不支持将包含了嵌套JavaBean或者List等复杂数据的JavaBean,作为元数据的。只支持一个包含简单数据类型的field的JavaBean。 创建数据文件 创建Student对象 package com.it19gong.sparkproject;

How to overwrite the rdd saveAsPickleFile(path) if file already exist in pyspark?

狂风中的少年 提交于 2020-02-02 12:45:36
问题 How to overwrite RDD output objects any existing path when we are saving time. test1: 975078|56691|2.000|20171001_926_570_1322 975078|42993|1.690|20171001_926_570_1322 975078|46462|2.000|20171001_926_570_1322 975078|87815|1.000|20171001_926_570_1322 rdd=sc.textFile('/home/administrator/work/test1').map( lambda x: x.split("|")[:4]).map( lambda r: Row( user_code = r[0],item_code = r[1],qty = float(r[2]))) rdd.coalesce(1).saveAsPickleFile("/home/administrator/work/foobar_seq1") The first time it

【大数据面试题】(五)Spark 相关面试题总结

痴心易碎 提交于 2020-02-01 23:28:33
文章目录 一、spark中的RDD是什么,有哪些特性? 二、概述一下spark中的常用算子区别(map,mapPartitions,foreach,foreachPatition)? 三、谈谈spark中的宽窄依赖? 四、spark中如何划分stage? 五、RDD缓存? 六、driver 的功能是什么? 七、Spark master 使用zookeeper 进行HA 的,有哪些元数据保存在Zookeeper? 一、spark中的RDD是什么,有哪些特性? 答:RDD(Resilient Distributed Dataset)叫做分布式数据集,是spark中最基本的数据抽象,它代表一个不可变,可分区,里面的元素可以并行计算的集合 Dataset:就是一个集合,用于存放数据的 Destributed:分布式,可以并行在集群计算 Resilient:表示弹性的,弹性表示 RDD中的数据可以存储在内存或者磁盘中; RDD中的分区是可以改变的; 五大特性: A list of partitions:一个分区列表,RDD中的数据都存储在一个分区列表中 A function for computing each split:作用在每一个分区中的函数 A list of dependencies on other RDDs:一个RDD依赖于其他多个RDD,这个点很重要

Spark工作原理及RDD

喜夏-厌秋 提交于 2020-01-31 14:19:41
1.基于内存 2.迭代式计算 3.分布式 基本工作原理: 将spark的程序提交到spark集群上,在Hadoop的HDFS或者Hive上读取数据,读取的数据存放在各个spark的节点上,分布式的存放在多个节点上,主要在每个节点的内存上,这样可以加快速度。 对节点的数据进行处理,处理后的数据存放在其他的节点的内存上。对数据的 计算操作针对多个节点上的数据进行并行操作。处理之后的数据可以到hadoop或者mysql或hbase中,或者结果直接返回客户端。 每一批处理的数据就是一个RDD spark开发:离线批处理,延迟性的交互式数据处理;SQL查询;实时查询。底层都是RDD和计算操作。 1.创建RDD 2.定义对RDD的计算操作 3.循环往复的过程,第一次计算之后,数据到了新的一批节点上,变成新的RDD,在进行计算操作。 4.获得最终的数据,将数据存储火哦返回给客户端。 spark与mapreduce的不同在于分布式处理,mapreduce里只有map和reduce两个 过程,spark在处理一个阶段之后可以继续处理很多个阶段,不止两个阶段,spark可以处理更多的数据 RDD(弹性分布式数据集)是spark提供的核心抽象 RDD在抽象上是一种元素集合,包含了数据,他是被分区的,分为多个分区,每个分区分布在集群中的不同节点上,从而让RDD中的数据 可以被并行操作。(分布式)