- 博客(169)
- 收藏
- 关注
原创 使用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
754
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
253
原创 【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
1251
原创 【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
1034
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
1017
原创 【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
682
原创 【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
2680
原创 【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
188
原创 【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
354
原创 【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
1314
原创 【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
212
原创 SparkRDD优化(四)之数据倾斜
一、数据倾斜指分区中的数据分配不均匀,数据集中在少数分区中(不怕数据大,就怕数据倾斜)数据倾斜发生时的现象1、绝大多数task执行得都非常快,但个别task执行极慢。比如,总共有1000个task,997个task都在1分钟之内执行完了,但是剩余两三个task却要一两个小时。这种情况很常见。2、原本能够正常执行的Spark作业,某天突然报出OOM(内存溢出)异常,观察异常栈,是我们写的业务代码造成的。这种情况比较少见。数据倾斜发生的原理在进行shuffle的时候,必须将各节点上相同的key拉
2020-11-16 10:15:28
362
原创 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
264
原创 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
314
原创 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
316
原创 【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
453
原创 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
248
原创 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
556
原创 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
604
原创 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
180
原创 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
567
原创 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
286
原创 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
1709
原创 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
403
原创 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
424
原创 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
331
原创 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
306
原创 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
819
原创 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
316
原创 【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
464
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
553
原创 【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
475
原创 Scala之单词计数、排序
单词计数scala> val stringList = List(“hello world hello gree”,“hello java hello scala”, “hello wenwen hello kb09”)scala> stringList.flatMap(x=>x.split(" ")).map(x=>(x,1)).groupBy(x=>x._1).map(x=>(x._1, x._2.size))排序正序排序:scala> string
2020-10-30 14:50:35
472
原创 【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
294
原创 Scala之Array方法集
参考博客:https://blog.csdn.net/zyp13781913772/article/details/81428862Scala:Array(集合、序列)数组是一种可变的、可索引的数据集合。在Scala中用Array[T]的形式来表示Java中的数组形式 T[]。val arr=Array(1, 2, 3, ) //声明一个数组对象val first=arr(0) // 读取第一个元素arr(2)=100 // 替换第三个元素为100方法一:arr.map(x=>x*2)
2020-10-29 16:58:39
870
原创 Scala JDBC 操作 MySQL
文章目录表结构依赖代码MysqlDemoCRUD测试参考表结构在mysql中创建数据库scalademo,在库中创建表studentCREATE TABLE student(id INT(10) PRIMARY KEY AUTO_INCREMENT,`name` VARCHAR(32),age INT(10))插入数据测试INSERT INTO student(`name`,age) VALUES("张三",18),("李四",21)依赖如果创建的工程是Maven工程,则需要添加
2020-10-29 14:35:22
271
原创 Scala部分函数、偏函数
部分函数部分应用函数(Partial Applied Function)是缺少部分参数的函数,是一个逻辑上概念。例如:def sum(x: Int, y: Int, z: Int) = x + y + z,当调用sum的时候,如果不提供所有的参数,或者只提供某些参数时,比如sum _ , sum(3, _: Int, :Int), sum(: Int, 3, 4), 这样就生成了所谓的部分应用函数。案例: def showMsg(title:String, content:String, num:
2020-10-26 16:57:53
198
原创 伴生类、伴生对象
参考博客:https://blog.csdn.net/m0_48758256/article/details/109241456伴生(Companion)1、单例对象与同名类定义在同一文件中时形成绑定关系同名类称为单例对象的伴生类(class)单例对象称为同名类伴生对象(object)2、伴生类与伴生对象可相互访问各自私有成员3、伴生对象可为伴生类增加静态成员伴生类与伴生对象案例:前提:同一个文件的class和object 名字相同伴生类和伴生对象在同一个文件中,名字相同,cl
2020-10-26 16:51:54
3576
原创 Scala特质
章节目录特质(trait)混入特质(mixin)动态混入特质特质与抽象类的选择特质(trait)Scala中没有接口(interface)的概念特质用于在类之间共享程序接口和字段,类似Java接口特质是字段和方法的集合,可以提供字段和方法实现类和单例对象都可以扩展特质(extends)特质不能被实例化,因此没有构造参数,类似Java接口特质使用“trait”关键字定义实现特质中的方法使用“override”混入特质(mixin)当某个特质被用于组合类时,被称为混入一个类只能有一个父类但
2020-10-26 16:28:15
263
1
原创 型变(协变、逆变、不变)、泛型类
型变一、协变class Covariant[+T]{ }对于两种类型 A 和 B,如果 A 是 B 的子类型,那么 Covariant[A] 就是 Covariant[B] 的子类型二、逆变class Inversion[-T]{ }对于两种类型 A 和 B,如果 A 是 B 的子类型,那么 Inversion[B] 就是 Inversionr[A] 的子类型三、不变class Invariant[T]{ }默认情况下,Scala中的泛型类是不变的如下图所示:案例:package
2020-10-26 16:04:22
1012
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅