![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
spark
weixin_43866709
The best or nothing
展开
-
spark3.0版本中sparkSQL自定义聚合函数(UDAF)
spark3.0版本可以继承Aggregator> 1.继承import org.apache.spark.sql.expressions.Aggregator,定义泛型> IN:输入的数据类型> BUF:缓冲区的数据类型> OUT:输出的数据类型> 2.重写方法> 3.注册自定义聚合函数> spark.udf.register("函数名称",functions.udaf(new MyAgeAvg()))原创 2023-03-25 17:13:19 · 718 阅读 · 0 评论 -
Spark中cache、persist、checkpoint区别
spark中的cache、persist、checkpoint都可以将RDD保存起来,进行持久化操作,供后面重用或者容错处理。但是三者有所不同。原创 2023-03-22 15:57:05 · 452 阅读 · 0 评论 -
Spark中groupByKey和reduceByKey的区别
在spark中,groupByKey和reduceByKey都有按照相同的key进行分组的功能,但reduceByKey自带了一个聚合的功能。两者在性能上也有差异。原创 2023-03-21 18:30:33 · 197 阅读 · 0 评论 -
spark中distinct函数去重原理
spark中的distinct函数去重方式原创 2023-03-21 15:21:23 · 770 阅读 · 0 评论 -
SparkStreaming整合Kafka(0.10.2.1)--直连方式实现
pom.xml<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=...原创 2019-04-12 15:33:39 · 818 阅读 · 0 评论 -
SparkStreaming整合Kafka(0.8.2.1)计算不同业务指标并实现累加(结合Redis)
业务是订单成交信息,要求计算出成交总金额,每一类商品的金额,区域成交的金额这三个指标。数据格式:C 202.102.152.3 家具 婴儿床 2000SparkStreaming读取Kafka中的数据,使用直连方式,然后实现数据的累加,数据保存到Redis中。OrderCount.scalapackage XXXimport io.netty.handler.codec.strin...原创 2019-04-11 17:29:42 · 719 阅读 · 0 评论 -
SparkStreaming整合Kafka(0.8.2.1)--直连方式实现
方式一:package XXXimport kafka.common.TopicAndPartitionimport kafka.message.MessageAndMetadataimport kafka.serializer.StringDecoderimport kafka.utils.{ZKGroupTopicDirs, ZkUtils}import org.I0Itec.z...原创 2019-04-09 18:46:29 · 271 阅读 · 0 评论 -
SparkStreaming整合Kafka(0.8.2.1)--之Receiver和直连方式介绍
配置Spark Streaming以从Kafka接收数据,有两种方法 :1.使用Receivers和Kafka的高级API的旧方法。2.不使用Receiver的新方法(在Spark 1.3中引入,就是直连方式)。它们具有不同的编程模型,性能特征。Receiver此方法使用Receiver接收数据。Receiver是使用Kafka高级消费者API实现的。与所有接收器一样,从Kafka通过R...原创 2019-04-08 17:03:07 · 457 阅读 · 0 评论 -
SparkStreaming--深入理解DStream
Spark Streaming是一个基于Spark Core之上的实时计算框架,可以从很多数据源消费数据并对数据进行处理。在Spark Streaing中有一个最基本的抽象叫DStream(代理),本质上就是一系列连续的RDD,DStream其实就是对RDD的封装DStream可以看作是一个RDD的工厂,该DStream里面生产都是相同业务逻辑的RDD,只不过是RDD里面要读取数据的不相同深...原创 2019-04-08 16:23:46 · 366 阅读 · 0 评论 -
在运行SparkStreaming程序时为了更好的看到结果,打印更少的日志文件
在运行SparkStreaming程序时,总是会产生很多的日志,这会影响到查看运行的结果,读取的数据准不准确。那么我们可以让他打印很少的日志内容。解决办法就是在resources中添加一个文件(这里使用的是maven项目),文件中添加如下内容:log4j.propertiesGlobal logging configurationlog4j.rootLogger=WARN, stdo...原创 2019-04-07 09:30:20 · 1286 阅读 · 0 评论 -
SparkStreaming--可以更新状态累加的WordCount
我们知道,在进行流式计算的时候,最怕的就是中间结果的丢失,那就需要我们将中间结果先保存起来,然后有新数据过来的时候,再将中间结果读出来进行累加。这样我们在进行聚合的时候要使用updateStateByKey方法。首先我们看一下updateStateByKey方法的源码: /** * Return a new "state" DStream where the state for eac...原创 2019-04-07 09:21:42 · 643 阅读 · 2 评论 -
SparkStreaming程序整合Kafka(0.8.2.1)
SparkStreaming从Kafka中读取数据,首先要安装好Kafka集群。Kafka的原理和详细安装步骤请参考博客:安装步骤:https://blog.csdn.net/weixin_43866709/article/details/88978954原理:https://blog.csdn.net/weixin_43866709/article/details/88989349创建D...原创 2019-04-07 09:01:35 · 204 阅读 · 0 评论 -
SparkStreaming第一个程序--从socket端口读取数据并统计单词数量
因为是要读取socket端口的数据,所以要启动一个socket端口,可以在虚拟机中安装nc,安装命令为:sudo yum install nc,当然也可以自己写一个socket端口。安装好之后,启动客户端和服务端:nc -lk 8888,streaming读取socket端口数据的原理:代码如下:package XXXimport org.apache.spark.streamin...原创 2019-04-07 08:50:33 · 873 阅读 · 0 评论 -
报错:java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.
在Windows上用IDEA本地运行Hadoop或者的spark程序时报错:java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.19/04/02 14:50:28 ERROR Shell: Failed to locate the winutils binar...原创 2019-04-02 15:27:21 · 1488 阅读 · 1 评论 -
sparkSQL---spark整合hive
spark整合hive就是让hive运行在spark上面,其实跟hive没有太大的关系,就是使用了hive的标准(HQL,元数据库,UDF,序列化,反序列化机制)hive原来的计算模型是MR,将计算结果写入到HDFS中,有点慢,而spark整合hive是让hive运行在spark集群上面,使用spark中的RDD(DataFrame),这样速度很快。下面来说一下这个元数据:真正要计算的数据是...原创 2019-04-02 12:40:32 · 1298 阅读 · 0 评论 -
SparkSQL--实现求每个学科老师访问量的排名
这里只记录一下用SparkSQL实现求每个学科老师访问量的排名。详细的RDD实现方法请参考博客:https://blog.csdn.net/weixin_43866709/article/details/88696934这里主要练习使用SQL中的窗口函数。package XXXimport java.net.URLimport org.apache.spark.sql.{DataFr...原创 2019-04-01 09:34:25 · 474 阅读 · 0 评论 -
sparkSQL---不同数据源的读写操作
sparkSQl 可以读取不同数据源的数据,比如jdbc,json,csv,parquet执行读操作就用sparkSession.read.文件类型,执行写操作就用SparkSession.write.文件类型首先创建一个SparkSession:val spark = SparkSession.builder().appName("JdbcDataSource") .maste...原创 2019-03-31 17:58:10 · 399 阅读 · 0 评论 -
spark2.0新特性--执行计划
spark2.0出现了Dataset,一个更加智能的RDD(本质上还是RDD)。这个Dataset操作更加1.简单:支持标准SQL和简化的API2.执行速度更快:spark作为一个编译器3.也更加智能:Dataset结构化数据流但是这个Dataset究竟怎么智能了呢?Dataset相比RDD改进的一个重要的地方就是这个Dataset执行的时候会先生成执行计划。那为什么生成执行计...原创 2019-03-31 10:41:47 · 783 阅读 · 0 评论 -
sparkSQL的三种join实现
此博客参考:https://www.cnblogs.com/0xcafedaddy/p/7614299.htmlhttps://blog.csdn.net/asongoficeandfire/article/details/53574034https://mp.weixin.qq.com/s/7ohGjdaTC56T4U3ISxGwIw引言Join是SQL语句中的常用操作,良好的表结构能够...转载 2019-03-31 09:36:18 · 251 阅读 · 0 评论 -
sparkSQL---Dataset讲解
在sparkSQL中推出了一个叫做Dataset的数据集,它是对RDD的一个智能的封装。官方文档中对Dataset的介绍很详细:接下来我们再来看一下Dataset源码中的说明:/** * A Dataset is a strongly typed collection of domain-specific objects that can be transformed * in par...原创 2019-03-31 09:10:44 · 617 阅读 · 0 评论 -
sparkSQL---自定义函数(UDF,UDTF,UDAF)
自定义函数被称为(UDF)UDF分为三种:UDF :输入一行,返回一个结果 ;一对一;比如定义一个函数,功能是输入一个IP地址,返回一个对应的省份UDTF:输入一行,返回多行(hive);一对多;sparkSQL中没有UDTF,spark中用flatMap即可实现该功能UDAF:输入多行,返回一行;aggregate(聚合),count,sum这些是spark自带的聚合函数,但是复...原创 2019-03-30 16:42:36 · 2141 阅读 · 1 评论 -
sparkSQL入门--1.x和2.x编程的区别
SparkSQL1.什么是sparkSQLSpark SQL是Spark用来处理结构化数据的一个模块,它提供了一个编程抽象叫做DataFrame并且作为分布式SQL查询引擎的作用。2.特点:易整合,统一的数据访问方式,兼容hive,标准的数据连接DataFrame与RDD类似,DataFrame也是一个分布式数据容器。然而DataFrame更像传统数据库的二维表格,除了数据以外,还记录...原创 2019-03-29 13:26:03 · 304 阅读 · 0 评论 -
spark优化--对象序列化问题
在写spark程序时,经常会遇到序列化问题,首先我们应该弄清楚为什么要进行序列化。因为当我们在Driver端创建一个对象,在Executor端要使用这个对象时,Driver要将这个对象发送给Executor,这个时候要进行序列化,只有通过序列化了,这个对象才能够通过网络进行传输。在Executor中创建一个类的实例下面先来看一个例子:Rules.scalapackage XXXc...原创 2019-03-28 12:22:19 · 760 阅读 · 2 评论 -
spark整体执行过程详解
spark整体执行过程可分为四个步骤:1.构建DAG(调用RDD上的方法)2.DAGScheduler将DAG切分Stage(切分的依据是shuffle),将Stage中生成的Task以TaskSet的形式给TaskScheduler3.TaskScheduler调度Task(根据资源情况将Task调度到相应的Executor中)4.Executor接收Task,然后将Task丢入到线程...原创 2019-03-26 19:49:10 · 1627 阅读 · 1 评论 -
spark之JDBCRDD--从Mysql中读取数据
spark中的RDD有很多对应的实现,比如JdbcRDD,是用来从MySQL中读取数据的。先来看一下JdbsRDD的源码:/** * An RDD that executes a SQL query on a JDBC connection and reads results. * For usage example, see test case JdbcRDDSuite. * * @...原创 2019-03-25 12:58:21 · 4728 阅读 · 0 评论 -
spark--用六种方法实现自定义排序
在实际开发中,我们经常需要自己定义排序规则对数据进行排序。例如这有一组数据val users = Array("li 30 99","zhao 29 999","zhang 28 98","wang 28 99")数据含义为:名字,年龄,颜值现在需要对这组数据进行排序,排序规则是,按颜值从高到低进行排序,颜值相同的话,再按年龄从低到高排序。下面用六种方法进行实现:一自定义一个类,用...原创 2019-03-24 15:40:20 · 534 阅读 · 0 评论 -
spark小案例---根据IP计算归属地
今天学习了一个根据IP统计归属地的小案例,在此记录一下。在电商网站后台都会记录用户的浏览日志,然后根据这些日志文件就可以做数据分析,比如统计用户的地址,喜好,这样就可以给用户推荐商品了。那么怎样进行统计呢,首先我们要有一份各个省份的IP规则,然后要有一份日志文件,我们从日志文件中切分出IP字段,然后与IP规则进行对比,就可以匹配到是哪个地区的了。我们先来写一下这个小案例的需求;根据访问日...原创 2019-03-24 09:56:22 · 687 阅读 · 0 评论 -
spark---广播变量
一.在写spark程序时,有可能Driver会从本地读取一份数据,这个时候这份数据就会在Driver所在的机器上,那么executor端也要使用这份数据;这时就需要将Driver端的数据广播给Executor端/** * Broadcast a read-only variable to the cluster, returning a * [[org.apache.spark....原创 2019-03-23 20:02:21 · 270 阅读 · 0 评论 -
spark将计算结果保存到mysql中
定义一个函数,将结果保存到MySQL中:参数是一个迭代器TestIp.scaladef data2MySQL(it: Iterator[(String, Int)]): Unit = { //一个迭代器代表一个分区,分区中有多条数据 //先获得一个JDBC连接 val conn: Connection = DriverManager.getConnection("...原创 2019-03-23 19:44:47 · 1135 阅读 · 0 评论 -
spark--WordCount执行过程详解
首先看一下WordCount代码:val conf = new SparkConf().setAppName("ScalaWordCount").setMaster("local[4]") //创建spark执行的入口 val sc = new SparkContext(conf) //指定以后从哪里读取数据创建RDD(弹性分布式数据集) val lines:RD...原创 2019-03-22 16:54:25 · 1286 阅读 · 0 评论 -
RDD操作实例--分组排序之三种方法求老师的访问量
现在有一组不同学科,不同老师的访问数据,需求是求出每个学科中排名前三的老师。数据样例:http://bigdata.edu360.cn/laozhang接下来用三种方法来计算:工具:hadoop集群,zookeeper集群,spark集群一.思路:1.对数据进行切分,留下学科和对应的老师2.将学科和老师当作key,和1组合在一起,形成((学科,老师),1)的元组3.把学科和老师都...原创 2019-03-20 19:09:41 · 1565 阅读 · 0 评论 -
RDD之foreach和foreachPartition方法
当我们创建一个RDD,并且执行map操作的时候,会生成一个新的RDD。而当我们不想要生成新的RDD时,我们要使用foreach或者foreachPartition方法foreach当执行完foreach,发现并没有打印出来结果。这个foreach方法是一个Action方法,而且任务执行的时候是在executor端执行的,所以它会将结果打印到executor端。详细解释请看博客:http...原创 2019-03-19 17:13:34 · 11160 阅读 · 0 评论 -
RDD之collect方法执行的过程
首先来看一张图:spark集群中有master节点和Worker节点,master节点负责任务调度,worker节点负责计算。当集群启动时,worker节点会向master注册,并且定期向master发送心跳。当我们向集群提交任务时,会启动一个进程spark-submit,这个进程也叫做driver。这个进程先要连接master,然后master会通过注册信息找到合适的worker节点去计...原创 2019-03-19 16:40:38 · 2922 阅读 · 0 评论 -
spark RDD的aggregate(聚合)方法
首先来看一下aggregate方法的具体实现:/** * Aggregate the elements of each partition, and then the results for all the partitions, using * given combine functions and a neutral "zero value". This function can...原创 2019-03-18 20:33:23 · 1457 阅读 · 0 评论 -
spark RDD的map方法和mapPartitionsWithIndex方法的区别
RDD的map方法,是Executor中执行时,是一条一条的将数据拿出来处理mapPartitionsWithIndex 一次拿出一个分区(分区中并没有数据,而是记录要读取哪些数据,真正生成的Task会读取多条数据),并且可以将分区的编号取出来先来看一下mapPartitionsWithIndex 方法的源码:/** * Return a new RDD by applying a f...原创 2019-03-18 16:27:17 · 728 阅读 · 0 评论 -
HDFS读取数据分区的数量
今天认真的看了看RDD 的分区,感觉挺麻烦的,就在此记录总结一下,如果有错误,还请各位大神指出!在我们使用并行化的方式创建sparkRDD的时候,我们可以指定RDD的分区。我们知道,mapreduce读取文件时允许的最小分区是1,而spark允许的最小分区是2hdfs读取文件时,默认会根据输入文件数量创建多少个task,生成对应数量的切片(文件小于blocksize).首先查看一下hd...原创 2019-03-18 13:24:03 · 2987 阅读 · 0 评论 -
spark RDD详解
RDD叫做弹性分布式数据集RDD概述1.什么是RDDRDD(Resilient Distributed Dataset)叫做分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变、可分区、里面的元素可并行计算的集合。RDD具有数据流模型的特点:自动容错、位置感知性调度和可伸缩性。RDD允许用户在执行多个查询时显式地将工作集缓存在内存中,后续的查询能够重用工作集,这极大地提升了查询速度...原创 2019-03-17 18:43:56 · 225 阅读 · 0 评论 -
本地调试spark程序
用IDEA编写spark程序,每次运行都要先打成jar包,然后再提交到集群上运行,这样很麻烦,不方便调试。我们可以直接在Idea中调试spark程序。例如下面的WordCount程序:package cn.edu360.sparkimport org.apache.spark.rdd.RDDimport org.apache.spark.{SparkConf, SparkContext...原创 2019-03-17 10:45:23 · 2174 阅读 · 0 评论 -
在IDEA中使用Java Lambda编写WordCount程序
创建项目详细过程请参考博客:在IDEA中用Scala编写WordCount程序并且上传到集群中运行https://blog.csdn.net/weixin_43866709/article/details/88599701下面是代码:package cn.edu360.spark;import org.apache.spark.SparkConf;import org.apache....原创 2019-03-17 10:08:29 · 324 阅读 · 0 评论 -
在IDEA中使用Java编写WordCount程序
创建项目详细过程请参考博客:在IDEA中用Scala编写WordCount程序并且上传到集群中运行https://blog.csdn.net/weixin_43866709/article/details/88599701下面是代码:package cn.edu360.spark;import org.apache.spark.SparkConf;import org.apache...原创 2019-03-17 09:26:49 · 883 阅读 · 0 评论