rdd

spark 应用场景2-身高统计

血红的双手。 提交于 2020-03-07 11:54:25
原文引自:http://blog.csdn.net/fengzhimohan/article/details/78564610 a. 案例描述 本案例假设我们需要对某个省的人口 (10万) 性别还有身高进行统计,需要计算出男女人数,男性中的最高和最低身高,以及女性中的最高和最低身高。本案例中用到的源文件有以下格式, 三列分别是 ID,性别,身高 (cm),格式如下: b.人口数据的生成 利用Java语言随机生成一组人口数据,包括序列ID,性别M/F,身高cm,代码如下: 1 import java.io.File; 2 import java.io.FileWriter; 3 import java.io.IOException; 4 import java.util.Random; 5 6 /** 7 * Created by Administrator on 2017/11/13. 8 */ 9 public class PeopleInfoFileGenerator { 10 public static void main(String[] args){ 11 File file = new File("F:\\PeopleInfo.txt"); 12 13 try { 14 Random random = new Random();//生成随机数 15 FileWriter

scala: how to rectify “option” type after leftOuterJoin

喜你入骨 提交于 2020-03-04 15:37:52
问题 Given scala> val rdd1 = sc.parallelize(Seq(("a",1),("a",2),("b",3))) scala> val rdd2 = sc.parallelize(Seq("a",5),("c",6)) scala> val rdd3 = rdd1.leftOuterJoin(rdd2) scala> rdd3.collect() res: Array[(String, (Int, Option[Int]))] = Array((a,(1,Some(5))), (a,(2,Some(5))), (b,(3,None))) We can see that the data type of "Option[Int]" in rdd3. Is there a way to rectify this so that rdd3 can be Array[String, (Int, Int)]? Suppose we can specify a value (e.g. 999) for the "None". 回答1: scala> val

scala: how to rectify “option” type after leftOuterJoin

放肆的年华 提交于 2020-03-04 15:37:24
问题 Given scala> val rdd1 = sc.parallelize(Seq(("a",1),("a",2),("b",3))) scala> val rdd2 = sc.parallelize(Seq("a",5),("c",6)) scala> val rdd3 = rdd1.leftOuterJoin(rdd2) scala> rdd3.collect() res: Array[(String, (Int, Option[Int]))] = Array((a,(1,Some(5))), (a,(2,Some(5))), (b,(3,None))) We can see that the data type of "Option[Int]" in rdd3. Is there a way to rectify this so that rdd3 can be Array[String, (Int, Int)]? Suppose we can specify a value (e.g. 999) for the "None". 回答1: scala> val

spark streamingRDD队列流

♀尐吖头ヾ 提交于 2020-03-04 04:13:45
用streamingContext.queueStream(queueOfRDD)创建基于RDD的Dstream 每隔1s创建一个RDD,加到队列里,每隔2s对Dstream进行处理 cd 。。。。 vim RDDQueueStream.py #!/usr/bin/env python3 import time from pyspark import SparkContext from spark.streaming import StreamingContext if__name__=“ main ”: sc = SparkContext(appName=‘PythonStreamingQueueStream’) ssc =StreamingContext(sc,2) #下面创建一个RDD队列流加了5次 rddQueue = [] for i in range(5): rddQueue += [ssc.saprkContext.parallelize([j for j in range(1,1001)],10)]#10是分区,每次生成一千个元素 time.sleep(1)#每隔1s筛一个RDD队列 Input = ssc.queueStream(rddQueue) mappedStream = input.map(lamda x:(x%10,1)) reducedStream =

Spark之RDD

允我心安 提交于 2020-03-02 22:58:43
一、什么是RDD RDD(Resilient Distributed Dataset)叫做 弹性分布式数据集 , 是Spark中最基本的数据抽象 ,它代表一个不可变、可分区、里面的元素可并行计算的集合。RDD具有数据流模型的特点:自动容错、位置感知性调度和可伸缩性。RDD允许用户在执行多个查询时显式地将工作集缓存在内存中,后续的查询能够重用工作集,这极大地提升了查询速度。 1.1 RDD属性 (1)Partition 即数据集的基本组成单位。对于RDD来说,每个分片都会被一个计算任务处理,并决定并行计算的粒度。用户可以在创建RDD时指定RDD的分片个数,如果没有指定,那么就会采用默认值。默认值就是程序所分配到的集群的CPU Core的总数目。 (2)一个计算每个分区的函数。 Spark中RDD的计算是以分片为单位的,每个RDD都会实现compute函数以达到这个目的。compute函数会对迭代器进行复合,不需要保存每次计算的结果。 (3)RDD之间的依赖关系。 RDD的每次转换都会生成一个新的RDD,所以RDD之间就会形成类似于流水线一样的前后依赖关系。在部分分区数据丢失时,Spark可以通过这个依赖关系重新计算丢失的分区数据,而不是对RDD的所有分区进行重新计算。 (4)一个Partitioner,即RDD的分片函数。控制分区数和分区策略 当前Spark中实现了两种类型的分片函数

spark RDD 详解

扶醉桌前 提交于 2020-03-02 22:24:26
概念 RDD具有以下一些特点: 创建:只能通过转换( transformation,如map/filter/groupBy/join等,区别于动作action)从两种数据源中创建RDD:1)稳定存储中的数据;2)其他RDD。 只读:状态不可变,不能修改 分区:支持使RDD中的元素根据那个key来分区( partitioning),保存到多个结点上。还原时只会重新计算丢失分区的数据,而不会影响整个系统。 路径:在RDD中叫世族或血统( lineage),即RDD有充足的信息关于它是如何从其他RDD产生而来的。 持久化:支持将会·被重用的RDD缓存(如in-memory或溢出到磁盘) 延迟计算:像DryadLINQ一样,Spark也会延迟计算RDD,使其能够将转换管道化(pipeline transformation) 操作:丰富的动作( action),count/reduce/collect/save等。 关于转换(transformation)与动作(action)的区别,前者会生成新的RDD,而后者只是将RDD上某项操作的结果返回给程序,而不会生成新的RDD RDD底层实现原理 RDD是一个分布式数据集,顾名思义,其数据应该分部存储于多台机器上。事实上,每个RDD的数据都以Block的形式存储于多台机器上,下图是Spark的RDD存储架构图

Spark 入门(Python、Scala 版)

帅比萌擦擦* 提交于 2020-02-29 09:44:17
本文中,我们将首先讨论如何在本地机器上利用Spark进行简单分析。然后,将在入门级水平探索Spark,了解Spark是什么以及它如何工作(希望可以激发更多探索)。最后两节将开始通过命令行与Spark进行交互,然后演示如何用Python写Spark应用,并作为Spark作业提交到集群上。同时也会提供相应的 Scala 版本。 1、设置Spark环境 在本机设置和运行Spark非常简单。你只需要下载一个预构建的包,只要你安装了Java 6+和Python 2.6+,就可以在Windows、Mac OS X和Linux上运行Spark。确保java程序在PATH环境变量中,或者设置了JAVA_HOME环境变量。类似的,python也要在PATH中。 假设你已经安装了Java和Python,以及 Spark,如果没有请参照之前的教程: 《Spark 伪分布式 & 全分布式 安装指南》: http://my.oschina.net/leejun2005/blog/394928 注意:如果要用到下文的 pyspark,则需要设置 python 相关的 spark 包路径: vi .bashrc export PYTHONPATH=$SPARK_HOME/python/:$SPARK_HOME/python/lib/py4j-0.8.2.1-src.zip:$PYTHONPATH 否则会报错:

Spark运行原理

人走茶凉 提交于 2020-02-28 19:54:55
Spark运行架构 基本概念 RDD:分布式内存的抽象概念,高度受限的共享内存模型 DAG:有向无环图,反应RDD的依赖关系 Executot:运行在工作节点的一个进程,负责运行任务,存储数据 任务Task:运行在Executor上的工作单元 作业:一个作业包含多个RDD及作用于相应RDD的操作 阶段Stage:作业调度的基本单位,以宽依赖、窄依赖划分。 架构设计 Spark的运行架构包括集群资源管理器(Cluster Manager)、运行作业任务的工作节点(Work Node)、每个应用的任务控制节点(Driver)和每个工作节点上负责具体任务的进程(Executor) 其中,Executor使用多线程来执行具体任务,减少任务的启动开销;其还有一个BlockManager存储模块,将内存和磁盘共同作为存储设备,内存作为默认存储,不够时,写入磁盘。因此减少了IO开销。 Spark运行基本流程 首先为应用构建基本运行环境,由任务控制节点Driver创建一个Spark Context对象,由该对象与资源管理器通信,申请资源和任务的调配 资源管理器为Executor分配资源,启动进程,Executor随时和资源管理器保持通信,利用心跳 Spark Context根据RDD的依赖关系构建相应的DAG图,将DAG图提交给DAG调度器(DAG Scheduler)

Spark核心算子

佐手、 提交于 2020-02-28 02:33:00
Spark RDD : Transformation Meaning map(func) 返回一个新的分布式数据集,该数据集是通过将源的每个元素传递给函数func处理形成的。 filter(func) 返回一个新的数据集,该数据集是通过func处理后在其上返回true 的源元素形成的。 flatMap(func) 与map相似,但是每个输入项都可以映射成0个或多个输出项(因此func应该返回Seq而不是单个项)。 mapPartitions(func) 与map相似,但是分别在每个RDD的分区(块)上运行,因此当运行在类型为T的RDD上时函数func必须被声明成 Iterator<T> => Iterator<U>(即对RDD中的每个分区的迭代器进行操作)迭代器。 mapPartitionsWithIndex(func) 与mapPartitions类似,但它还为func提供表示分区索引的整数值,因此当在类型T的RDD上运行时,func的类型必须为 (Int, Iterator<T>) => Iterator<U>(即带索引的迭代器类型)。 union(otherDataset) 返回一个新的数据集,其中包含了源数据集以及参数数据集中的每个元素。 intersection(otherDataset) 返回一个新的RDD,其中包含源数据集中和参数数据集交集的元素。 distinct(

RDD(十)——案例实操

亡梦爱人 提交于 2020-02-27 16:01:51
需求: 数据结构:时间戳,省份,城市,用户,广告,中间字段使用空格分割。 样本如下: 1516609143867 6 7 64 16 1516609143869 9 4 75 18 1516609143869 1 7 87 12 思路分析如下: 第一步:过滤无关的数据字段,只留下省份,广告 第二步:省份与广告可以组成一个key,value就是该广告在该省份的点击次数 第三步:把省份这个字段作为key,将数据分隔到不同的集合; 第四步:对分区内的数据按照value进行排序,使得在集合内实现有序 最后取出前三名 实现代码如下: package example import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} //需求:统计出每一个省份广告被点击次数的TOP3 object Example { def main(args: Array[String]): Unit = { //1.初始化spark配置信息并建立与spark的连接 val sparkConf = new SparkConf().setMaster("local[*]").setAppName("example") val sc = new SparkContext(sparkConf) //2