Spark
屡傻不改
这个作者很懒,什么都没留下…
展开
-
【Spark】(十九)项目实战 — 航班飞行网图分析
需求概述探索航班飞行网图数据构建航班飞行网图使用Spark GraphX完成下列任务统计航班飞行网图中机场的数量统计航班飞行网图中航线的数量计算最长的飞行航线(Point to Point)找出最繁忙的机场找出最重要的飞行航线(PageRank)找出最便宜的飞行航线(SSSP)数据探索下载数据链接: https://pan.baidu.com/share/init?surl=RUTXwr7Nqeg5cp8S8Tp0YA提取码:gvyd数据格式文件原创 2020-11-30 19:51:10 · 1121 阅读 · 1 评论 -
【Spark】(十八)Spark GraphX 中的 pregel函数
Pregel概述Pregel是Google提出的用于大规模分布式图计算框架,常用来解决以下问题:图遍历(BFS)单源最短路径(SSSP)PageRank计算Pregel的计算由一系列迭代组成,称为supersteps。Pregel迭代过程 (实现过程)如下:每个顶点从上一个superstep接收入站消息计算顶点新的属性值在下一个superstep中向相邻的顶点发送消息当没有剩余消息时,迭代结束源码参数分析 def pregel[A: ClassTa原创 2020-11-30 19:23:45 · 215 阅读 · 0 评论 -
【Spark】(十七)GraphX之connectedComponents
连通分量连通分量是一个子图,其中任何两个顶点通过一条边或一系列边相互连接,其顶点是原始图顶点集的子集,其边是原始图边集的子集首先准备数据源,存放地址为Linux中/opt/kbfile目录下links.csv1,2,friend1,3,sister2,4,brother3,2,boss4,5,client1,9,friend6,7,cousin7,9,coworker8,9,father10,11,colleague10,12,colleague11,12,colleague原创 2020-11-26 15:21:57 · 1010 阅读 · 0 评论 -
【Spark】(十六)PageRank(PR)算法原理剖析及Spark实现
PageRank(PR)算法用于评估网页链接的质量和数量,以确定该网页的重要性和权威性的相对分数,范围为0到10从本质上讲,PageRank是找出图中顶点(网页链接)的重要性GraphX提供了PageRank API用于计算图的PageRanPageRank算法基本思想描述:被用户访问越多的网页更可能质量越高,而用户在浏览网页时主要通过超链接进行页面跳转,因此需要通过分析超链接组成的拓扑结构来推算每个网页被访问频率的高低。最简单的,我们可以假设当一个用户停留在某页面时,跳转到页面上每个被链页面的概原创 2020-11-26 13:55:22 · 460 阅读 · 0 评论 -
【Spark】(十五)基于Spark GraphX的图形数据分析
为什么需要图计算许多大数据以大规模图或网络的形式呈现许多非图结构的大数据,常会被转换为图模型进行分析图数据结构很好地表达了数据之间的关联性图(Graph)的基本概念1、图是由顶点集合(Vertex)及顶点间的关系集合(边edge)组成的一种网状数据结构通常表示为二元组:Graph=(V,E)可以对事物之间的关系建模2、应用场景:在地图应用中寻找最短路径社交网络关系网页间超链接关系图的术语1、顶点(Vertex)2、边(Edge)3、有向图4、无向图5、有环图原创 2020-11-26 10:22:03 · 821 阅读 · 0 评论 -
使用Spark SQL算子练习mysql经典50道题
Spark-shell连接MySQL将hive/conf里面的 hive-site.xml复制到spark/conf/将hive/lib里面的mysql-connector-java-5.1.38.jar复制到spark/jars/读取MySQL文件,返回一个dataFrame读取student表val studentDF = spark.read.format("jdbc").options(Map("url" -> "jdbc:mysql://hadoop001:3306/scho原创 2020-11-23 16:00:43 · 711 阅读 · 1 评论 -
【Spark】(十四)JSON日志数据处理
JSON数据清洗1、JSON数据仅以两条数据为例1593136280858|{"cm":{"ln":"-55.0","sv":"V2.9.6","os":"8.0.4","g":"C6816QZ0@gmail.com","mid":"489","nw":"3G","l":"es","vc":"4","hw":"640*960","ar":"MX","uid":"489","t":"1593123253541","la":"5.2","md":"sumsung-18","vn":"1.3.4","ba"原创 2020-11-23 15:03:08 · 233 阅读 · 0 评论 -
【Spark】(十三)Spark数据分析及处理
用例一:数据清洗基本步骤:1、读入日志文件并转化为RDD[Row]类型按照Tab切割数据过滤掉字段数量少于8个的2、对数据进行清洗按照第一列和第二列对数据进行去重过滤掉状态码非200过滤掉event_time为空的数据将url按照”&”以及”=”切割3、保存数据将数据写入mysql表中日志拆分字段:event_timeurlmethodstatussipuser_uipaction_prependaction_client如下是日志中的一条数据按照Tab原创 2020-11-23 14:22:08 · 1221 阅读 · 0 评论 -
【Spark】(十二)使用UDTF(User-Defined Table-Generating Functions)
一、UDTF介绍UDTF(User-Defined Table-Generating Functions) 用来解决 输入一行输出多行(On-to-many maping) 的需求。二、使用UDTF继承org.apache.hadoop.hive.ql.udf.generic.GenericUDTF,实现initialize, process, close三个方法。1、UDTF首先会调用initialize方法,此方法返回UDTF的返回行的信息(返回个数,类型)。2、初始化完成后,会调用proc原创 2020-11-18 18:32:01 · 963 阅读 · 1 评论 -
【Spark】(十一)使用UDAF(User Defined Aggregate Function)
一、UDAF简介UDAF(User Defined Aggregate Function),即用户定义的聚合函数,聚合函数和普通函数的区别是什么呢,普通函数是接受一行输入产生一个输出,聚合函数是接受一组(一般是多行)输入然后产生一个输出,即将一组的值想办法聚合一下。关于UDAF的一个误区我们可能下意识的认为UDAF是需要和group by一起使用的,实际上UDAF可以跟group by一起使用,也可以不跟group by一起使用,这个其实比较好理解,联想到mysql中的max、min等函数,可以:s原创 2020-11-18 17:07:10 · 962 阅读 · 0 评论 -
【Spark】(十)使用UDF(User Define Function)
一、UDF介绍UDF(User Define Function),即用户自定义函数,Spark的官方文档中没有对UDF做过多介绍,猜想可能是认为比较简单吧。几乎所有sql数据库的实现都为用户提供了扩展接口来增强sql语句的处理能力,这些扩展称之为UDXXX,即用户定义(User Define)的XXX,这个XXX可以是对单行操作的UDF,或者是对多行操作的UDAF,或者是UDTF,本次主要介绍UDF。UDF的UD表示用户定义,既然有用户定义,就会有系统内建(built-in),一些系统内建的函数比如a原创 2020-11-18 11:40:42 · 647 阅读 · 0 评论 -
【Spark】(九)Spark SQL函数(内置函数、自定义函数)
内置函数(org.apache.spark.sql.funtions.scala)一、常用内置函数:1.聚合函数approx_count_distinct/countDistinct: 计算某一列或几列不同元素的个数avg: 平均数, count: 个数;first: 首个元素, last:最后一个元素;max/min, mean, sum, sumDistinctvar_pop: 总体方差, var_samp/variance 计算样本方差; stddev_pop, stddev_samp原创 2020-11-18 10:42:31 · 2601 阅读 · 0 评论 -
【Spark】(八)Spark SQL 操作外部数据源
Spark SQL 操作外部数据源1、Parquet文件是一种流行的列式存储格式,以二进制存储,文件中包含数据与元数据案例:Spark SQL写parquet文件object ParquetDemo { def main(args: Array[String]): Unit = { val spark = SparkSession.builder().master("local[*]").appName("ParquetDemo").getOrCreate() import s原创 2020-11-18 10:02:47 · 172 阅读 · 0 评论 -
【Spark】(七)Spark SQL 应用解析
认识Spark SQL1、什么是Spark SQL?Spark SQL是Spark的核心组件之一,主要用于进行结构化数据的处理。它提供的最核心的编程抽象就是DataFrame。2、Spark SQL的作用提供一个编程抽象(DataFrame) 并且作为分布式 SQL 查询引擎DataFrame:它可以根据很多源进行构建,包括:结构化的数据文件,hive中的表,外部的关系型数据库,以及RDD3、运行原理将 Spark SQL 转化为 RDD, 然后提交到集群执行4、特点(1)容易整合(2原创 2020-11-16 19:00:39 · 324 阅读 · 0 评论 -
SparkRDD优化(四)之数据倾斜
一、数据倾斜指分区中的数据分配不均匀,数据集中在少数分区中(不怕数据大,就怕数据倾斜)数据倾斜发生时的现象1、绝大多数task执行得都非常快,但个别task执行极慢。比如,总共有1000个task,997个task都在1分钟之内执行完了,但是剩余两三个task却要一两个小时。这种情况很常见。2、原本能够正常执行的Spark作业,某天突然报出OOM(内存溢出)异常,观察异常栈,是我们写的业务代码造成的。这种情况比较少见。数据倾斜发生的原理在进行shuffle的时候,必须将各节点上相同的key拉原创 2020-11-16 10:15:28 · 337 阅读 · 0 评论 -
SparkRDD优化(三)之SparkRDD分区设计
RDD分区一、coalesce:对RDD重新分区函数定义def coalesce(numPartitions : scala.Int, shuffle : scala.Boolean = { /* compiledcode */ })(implicit ord : scala.Ordering[T]numPartitions:分区个数,若减少分区,直接设置新的分区数即可shuffle:是否增加分区个数,若增加分区个数,设置shuffle = true应用:当将大数据集过滤处理后,分区中数据很原创 2020-11-13 09:15:28 · 250 阅读 · 0 评论 -
【Spark】(六)任务提交(Spark Submit)
Spark 任务的提交spark-submit的一般格式如下:bin/spark-submit [options] <app jar | python file> [app options][options] 是要传给spark-submit 的标记列表。你可以运行spark-submit --help 列出所有可以接收的标记<app jar | python File> 表示包含应用入口的JAR 包或Python 脚本。[app options] 是传给你的应用的选项。原创 2020-11-16 12:03:57 · 1271 阅读 · 0 评论 -
【Spark】(五)装载数据源
一、装载CSV数据源1、文件预览2、使用SparkContextobject CSVDemo { def main(args: Array[String]): Unit = { val conf = new SparkConf().setMaster("local[*]").setAppName("CSVDemo") val sc = new SparkContext(conf) //一、使用SparkContext val lines = sc.textFil原创 2020-11-16 11:20:28 · 193 阅读 · 0 评论 -
SparkRDD优化(一)之SparkRDD持久化
SparkRDD持久化1、不使用RDD持久化的问题2、RDD持久化原理Spark非常重要的一个功能特性就是可以将RDD持久化在内存中。当对RDD执行持久化操作时,每个节点都会将自己操作的RDD的partition持久化到内存中,并且在之后对该RDD的反复使用中,直接使用内存缓存的partition。这样的话,对于针对一个RDD反复执行多个操作的场景,就只要对RDD计算一次即可,后面直接使用该RDD,而不需要反复计算多次该RDD。巧妙使用RDD持久化,甚至在某些场景下,可以将spark应用程序的性能原创 2020-11-12 19:47:58 · 298 阅读 · 0 评论 -
SparkRDD优化(二)之SparkRDD共享变量(广播变量,累加器)
一、广播变量(broadcast variable)广播变量:允许开发者将一个只读变量(Driver端)缓存到每个节点(Executor)上,而不是每个任务传递一个副本图解:定义广播变量val arr = Array("java","scala","spark")val broadcast = sc.broadcast(arr)注意:变量一旦被定义为一个广播变量,那么这个变量只能读,不能修改访问广播变量方式val c = broadcast.value案例:object Broad原创 2020-11-13 08:25:18 · 286 阅读 · 0 评论 -
【Spark】(四)spark分布式计算原理
Spark WordCount运行原理一个spark任务可以有多个stage,一个stage可以有多个Task,真正执行任务的就是Task对象在一个stage中一个分区就是一个TaskRDD的依赖关系1、Lieage:血统、遗传RDD最重要的特性之一,保存了RDD的依赖关系RDD实现了基于Lineage的容错机制2、依赖关系:宽依赖:一个父RDD的分区被子RDD的多个分区使用,例如map、flatMap、filter、union等操作都会产生窄依赖;(独生子女)窄依赖:一个父原创 2020-11-12 17:37:12 · 435 阅读 · 0 评论 -
spark RDD算子(十三)之RDD 分区 HashPartitioner,RangePartitioner,自定义分区
关键字: spark分区方式,java HashPartitioner分区,scala HashPartitioner分区, java RangePartitioner 分区,scala RangePartitioner分区, java 自定义分区,scala自定义分区一、默认分区和HashPartitioner分区默认的分区就是HashPartition分区,默认分区不再介绍,下面介绍HashPartition的使用通过上一章 mapPartitionsWithIndex的例子,我们可以构建一个方法原创 2020-11-11 15:28:58 · 238 阅读 · 0 评论 -
spark RDD算子(十二)之RDD 分区操作上mapPartitions, mapPartitionsWithIndex
一、mapPartitionsmapPartition可以倒过来理解。先partition,再把每个partition进行map函数适用场景:如果再映射的过程中需要频繁创建额外的对象,使用mapPartitions要比map高效的多比如,将RDD中的所有数据通过JDBC连接写入数据库,如果使用map函数,可能要为每一个元素都创建一个connection,这样开销很大,如果使用mapPartitions,那么只需要针对每一个分区建立一个connection。案例:把每一个元素平方Java版本pu原创 2020-11-11 12:20:47 · 518 阅读 · 0 评论 -
spark RDD算子(十一)之RDD Action 保存操作saveAsTextFile,saveAsSequenceFile,saveAsObjectFile,saveAsHadoopFile等
章节目录一、saveAsTextFile二、saveAsSequenceFile三、saveAsObjectFile四、saveAsHadoopFile五、saveAsHdoopDataset六、saveAsNewAPIHadoopFile七、saveAsNewAPIHadoopDataset一、saveAsTextFile函数定义def saveAsTextFile(path: String): Unitdef saveAsTextFile(path: String, codec: Class[_原创 2020-11-11 11:58:24 · 579 阅读 · 0 评论 -
spark RDD算子(十)之PairRDD的Action操作countByKey, collectAsMap
章节目录一、countByKeyScala版本Java版本二、collectAsMapScala版本Java版本一、countByKey函数定义def countByKey(): Map[K, Long]Scala版本scala> val rdd = sc.parallelize(Array((1,2),(2,4),(2,5),(3,4),(3,5),(3,6)))rdd: org.apache.spark.rdd.RDD[(Int, Int)] = ParallelCollection原创 2020-11-11 11:44:45 · 162 阅读 · 0 评论 -
spark RDD算子(九)之基本的Action操作 first, take, collect, count, countByValue, reduce, aggregate, fold,top
章节目录一、firstScala版本Java版本二、takeScala版本Java版本三、collectScala版本Java版本四、countScala版本Java版本五、countByValueScala版本Java版本六、reduceScala版本Java版本七、aggregateScala版本八、foldScala版本Java版本九、topScala版本Java版本十、takeOrderedScala版本Java版本十一、foreachScala版本Java版本一、first返回第一个元素Sc原创 2020-11-10 21:39:15 · 537 阅读 · 0 评论 -
spark RDD算子(八)之键值对关联操作 subtractByKey, join,fullOuterJoin, rightOuterJoin, leftOuterJoin
章节目录一、subtractByKey二、join三、fullOuterJoin四、leftOuterJoin五、RightOuterJoin代码示例Scala版本Java版本一、subtractByKey函数定义def subtractByKey[W](other: RDD[(K, W)])(implicit arg0: ClassTag[W]): RDD[(K, V)] def subtractByKey[W](other: RDD[(K, W)], numPartitions: Int)(im原创 2020-11-10 19:54:57 · 266 阅读 · 0 评论 -
spark RDD算子(七)之键值对分组操作 groupByKey,cogroup
一、groupByKey函数定义def groupByKey(): RDD[(K, Iterable[V])] def groupByKey(numPartitions: Int): RDD[(K, Iterable[V])] def groupByKey(partitioner: Partitioner): RDD[(K, Iterable[V])]groupByKey会将RDD[key,value] 按照相同的key进行分组,形成RDD[key,Iterable[value]]的形式,有点类原创 2020-11-10 08:38:20 · 1647 阅读 · 0 评论 -
spark RDD算子(六)之键值对聚合操作reduceByKey,foldByKey,排序操作sortByKey
章节目录一、reduceByKeyscala版本Java版本二、foldByKeyscala版本三、sortByKeyscala版本Java版本一、reduceByKey函数定义def reduceByKey(func: (V, V) => V): RDD[(K, V)]def reduceByKey(func: (V, V) => V, numPartitions: Int): RDD[(K, V)] def reduceByKey(partitioner: Partitioner,原创 2020-11-09 17:08:31 · 388 阅读 · 0 评论 -
spark RDD算子(五)之键值对聚合操作 combineByKey
章节目录combineByKey案例scala版本Java版本combineByKey函数定义def combineByKey[C](createCombiner: (V) => C, mergeValue: (C, V) => C, mergeCombiners: (C, C) => C): RDcreateCombiner: combineByKey() 会遍历分区中的所有元素,因此每个元素的键要么还没有遇到过,要么就和之前的某个元素的键相同。如果这是一个新的元素, c原创 2020-11-09 16:59:27 · 389 阅读 · 0 评论 -
spark RDD算子(四)之创建键值对RDD mapToPair,flatMapToPair
章节目录一、mapToPairscala版本Java版本二、flatMapToPairscala版本Java版本一、mapToPair案例:在项目中创建src同级目录in,并在此目录中创建sample.txt文件sample.txt文件内容如下:aa bb cc aa aa aa dd dd ee ee ee eeff aa bb zksee kksee zz zksscala版本scala是没有mapToPair函数的,scala版本只需要map就可以了val conf = new原创 2020-11-05 20:50:48 · 305 阅读 · 0 评论 -
spark RDD算子(三) distinct,union,intersection,subtract,cartesian
章节目录一、distinctscala版本Java版本二、unionscala版本Java版本三、intersectionScala版本Java版本四、subtractscala版本Java版本五、cartesianscala版本Java版本一、distinctdistinct用于去重, 我们生成的RDD可能有重复的元素,使用distinct方法可以去掉重复的元素, 不过此方法涉及到混洗,操作开销很大scala版本val conf = new SparkConf().setMaster("local原创 2020-11-05 16:31:46 · 282 阅读 · 0 评论 -
spark RDD算子(二) filter,map ,flatMap
章节目录一、filterscala版本Java版本二、mapscala版本Java版本三、flatMapscala版本Java版本一、filter对元素进行过滤,对每个元素应用指定函数,返回值为true的元素保留在新的RDD中案例:在项目中创建src同级目录in,并在此目录中创建sample.txt文件sample.txt文件内容如下:aa bb cc aa aa aa dd dd ee ee ee eeff aa bb zksee kksee zz zksscala版本//输出包含原创 2020-11-05 16:26:55 · 782 阅读 · 0 评论 -
spark RDD算子(一) parallelize,makeRDD,textFile
章节目录一、parallelizescala版本Java版本二、makeRDD三、textFilescala版本Java版本一、parallelize调用SparkContext 的 parallelize(),将一个存在的集合,变成一个RDD,这种方式试用于学习spark和做一些spark的测试scala版本def parallelize[T](seq: Seq[T], numSlices: Int = defaultParallelism)(implicit arg0: ClassTag[T])原创 2020-11-05 16:22:27 · 281 阅读 · 0 评论 -
【Spark】(三)spark基础及架构
为什么使用Spark(1)MapReduce编程模型的局限性1、繁杂只有Map和Reduce两个操作,复杂的逻辑需要大量的样板代码2、处理效率低:Map中间结果写磁盘,Reduce写HDFS,多个Map通过HDFS交换数据任务调度与启动开销大3、不适合迭代处理、交互式处理和流式处理(2)Spark是类Hadoop MapReduce的通用并行框架1、Job中间输出结果可以保存在内存,不再需要读写HDFS2、比MapReduce平均快10倍以上Spark优势1、速度快基于内原创 2020-11-04 18:25:58 · 444 阅读 · 1 评论 -
Intellij IDEA--Maven创建Spark工程
一、创建Maven项目,添加依赖1、 添加以下依赖(scala-library、spark-core 、spark-sql)<dependency> <groupId>org.scala-lang</groupId> <artifactId>scala-library</artifactId> <version>2.11.8</version></dependency> &原创 2020-11-04 15:38:23 · 528 阅读 · 0 评论 -
【Spark】(二)spark RDD知识点
Spark RDD概念1、简单的解释RDD是将数据项拆分为多个分区的集合,存储在集群的工作节点上的内存中,并执行正确的操作2、复杂的解释RDD是用于数据转换的接口RDD指向了存储在HDFS、Cassandra、HBase等、或缓存(内存、内存+磁盘、仅磁盘等),或在故障或缓存收回时重新计算其他RDD分区中的数据3、RDD是弹性分布式数据集(Resilient Distributed Datasets)a)分布式数据集RDD是只读的、分区记录的集合,每个分区分布在集群的不同节点上RDD并不原创 2020-11-04 15:03:52 · 437 阅读 · 0 评论 -
【Spark】(一)spark安装配置
一、前提安装jdkscala、spark版本号:scala scala-2.11.12spark spark-2.4.5安装包下载地址:https://pan.baidu.com/s/1Lq5odbQiYdSpkqbyRX8Fww)提取码:w2xv二、安装配置scala1、下载并上传scala安装包至linux的software目录下2、解压安装包至/opt目录下,并重命名为scalatar -zxvf scala-2.11.12.tgz -C /opt/cd /opt/mv sc原创 2020-10-30 14:48:18 · 272 阅读 · 0 评论