- 博客(76)
- 收藏
- 关注
原创 hive中cast()函数
CAST函数用于将某种数据类型的表达式显式转换为另一种数据类型。CAST()函数的参数是一个表达式,它包括用AS关键字分隔的源值和目标数据类型。语法:CAST (expression AS data_type)expression:任何有效的SQServer表达式。AS:用于分隔两个参数,在AS之前的是要处理的数据,在AS之后是要转换的数据类型。data_type:目标系统所提供的数据类型,包括bigint和sql_variant,不能使用用户定义的数据类型。
2024-07-02 14:26:32
985
原创 基于淘宝商城用户购物行为数据分析系统
本文使用HIve+superset技术对阿里云天池提供的淘宝用户购物数据进行处理分析,得到有价值的信息并对平台提出有建设性意义的意见。
2024-06-21 09:45:35
1813
1
原创 SparkSQL优化
然后Spark SQL在执行查询任务时,只需扫描必需的列,从而以减少扫描数据量、提高性能。得到的优化执行计划在转换成物理执行计划的过程中,还可以根据具体的数据源的特性将过滤条件下推至数据源内。1)定制化内存管理:Rdd数据都放在堆内存,JAVA(JVM)内存,内存管理回收分配不是由spark管理,是由JAVA(GC)管理,有时候会出现资源不一致问题,spark不是直接的内存管理者。对于普通开发者而言,查询优化器的意义在于,即便是经验并不丰富的程序员写出的次优的查询,也可以被尽量转换为高效的形式予以执行。
2024-05-07 19:27:04
1373
原创 SparkSQL与Hive整合 、SparkSQL函数操作
在使用聚合函数后,会将多行变成一行,而over()开窗函数其实就是给每个分组的数据,按照其排序的顺序,打上一个分组内的行号,直接将所有列信息显示出来。SQL中函数,其实说白了就是各大编程语言中的函数,或者方法,就是对某一特定功能的封装,通过它可以完成较为复杂的统计。当系统提供的这些函数,满足不了我们的需要的话,就只能进行自定义相关的函数,一般自定义的函数两种,UDF和UDAF。2)开窗函数:over()开窗函数是按照某个字段分组,然后查询出另一字段的前几个的值,相当于分组取topN。
2024-05-07 19:24:58
863
原创 SparkSQLAPI
SparkSQL对数据的落地保存使用api为:spark.write.save(),需要指定数据的落地格式,因为和read的默认格式一样,save的默认格式也是parquet,需要在write和save之间指定具体的格式format(format)。spark.read.format(数据文件格式).load(path)这个方式有更加清晰的简写方式,比如要加载json格式的文件:spark.read.json(path)。可以采用SaveMode执行存储操作,SaveMode定义了对数据的处理模式。
2024-05-06 17:13:11
337
1
原创 SparkSQL编程入口和模型与SparkSQL基本编程
表头,表名,字段,字段类型。理解了RDD,DataFrame就容易理解些,DataFrame的思想来源于Python的pandas库,RDD是一个数据集,DataFrame在RDD的基础上加了Schema(描述数据的信息,可以认为是元数据,DataFrame曾经就有个名字叫SchemaRDD)。3)数据集:即数据的集合,相对于DataFrame和Dataset,RDD是Spark最底层的抽象,目前是开发者用的最多的,但逐步会转向DataFrame和Dataset(当然,这是Spark的发展趋势)调整。
2024-05-06 17:11:33
1016
1
原创 SparkSql介绍
SparkSQL的前身不叫SparkSQL,而叫Shark,最开始的时候底层代码优化,sql的解析、执行引擎等等完全基于Hive,总之Shark的执行速度要比hive高出一个数量级,但是hive的发展制约了Shark,所以在15年中旬的时候,shark负责人,将shark项目结束掉,重新独立出来的一个项目,就是sparksql,不再依赖hive,做了独立的发展,逐渐的形成两条互相独立的业务:SparkSQL和Hive-On-Spark。存储在关系型数据库中的数据,就是结构化数据;非结构化数据是什么?
2024-05-06 17:05:49
646
1
原创 Spark RDD的分区与依赖关系
但是需要注意的是,由于JAVA中数组的hashCode是基于数组对象本身的,不是基于数组内容的,所以如果RDD的key是数组类型,那么可能导致数据内容一致的数据key没法分配到同一个RDD分区中,这个时候最好自定义数据分区器,采用数组内容进行分区或者将数组的内容转换为集合。Spark目前支持Hash分区和Range分区,用户也可以自定义分区,Hash分区为当前的默认分区,Spark中分区器直接决定了RDD中分区的个数、RDD中每条数据经过Shuffle过程属于哪个分区和Reduce的个数。
2024-04-29 17:04:31
1134
1
原创 Spark持久化、broadcast广播变量和accumulator累加器
如果我们要在分布式计算里面分发大对象,例如:字典,集合,黑白名单等,这个都会由Driver端进行分发,一般来讲,如果这个变量不是广播变量,那么每个task就会分发一份,这在task数目十分多的情况下Driver的带宽会成为系统的瓶颈,而且会大量消耗task服务器上的资源,如果将这个变量声明为广播变量,那么只是每个executor拥有一份,这个executor启动的task会共享这个变量,节省了通信的成本和服务器的资源。如果内存不足,剩余的部分不持久化,使用的时候,没有持久化的那一部分数据重新加载。
2024-04-29 16:59:00
1605
1
原创 RDD算子使用--action行动算子操作
3)collect算子:字面意思就是收集,拉取的意思,该算子的含义就是将分布在集群中的各个partition中的数据拉回到driver中,进行统一的处理;4)take&first:返回该rdd中的前N个元素,如果该rdd的数据是有序的,那么take(n)就是TopN;而first是take(n)中比较特殊的一个take(1)。foreach主要功能,就是用来遍历RDD中的每一条纪录,其实现就是将map或者flatMap中的返回值变为Unit即可,即foreach(A => Unit)。
2024-04-28 19:25:46
276
原创 RDD算子使用----transformation转换操作
rdd.map(p: A => B):RDD,对rdd集合中的每一个元素,都作用一次该func函数,之后返回值为生成元素构成的一个新的RDD。rdd.flatMap(p: A => 集合):RDD ==>rdd集合中的每一个元素,都要作用func函数,返回0到多个新的元素,这些新的元素共同构成一个新的RDD。mapPartitions(p: Iterator[A] =>Iterator[B]),上面的map操作,一次处理一条记录;而mapPartitions一次性处理一个partition分区中的数据。
2024-04-28 19:21:53
1031
原创 Spark RDD
最后,RDD会自动从节点故障中恢复。1)输入:在Spark程序运行中,数据从外部数据空间(如分布式存储:textFile读取HDFS等,parallelize方法输入Scala集合或数据)输入Spark,数据进入Spark运行时数据空间,转化为Spark中的数据块,通过BlockManager进行管理。需要知道RDD操作算子的分类,基本上分为两类:transformation和action,当然更加细致的分,可以分为输入算子,转换算子,缓存算子,行动算子,整个RDD原生数据空间如图-21所示。
2024-04-28 19:15:40
1330
1
原创 Spark核心名词解释与编程
14)Transformations:转换(Transformations) (如:map, filter, groupBy, join等),Transformations操作是Lazy的,也就是说从一个RDD转换生成另一个RDD的操作不是马上执行,Spark在遇到Transformations操作时只会记录需要这样的操作,并不会去执行,需要等到有Actions操作的时候才会真正启动计算过程进行计算。改参数,代表的是spark作业的执行方式,或者指定的spark程序的cluster-manager的类型。
2024-04-28 19:13:48
1381
原创 Spark高可用模式和Spark分布式Yarn环境安装
ha验证,要干掉alive的master,观察standby的master,hadoop102的状态缓慢的有standby转变为alive。1)上线:不需要在现有集群的配置上做任何修改,只需要准备一台worker机器即可,可和之前的worker的配置相同。配置基于Zookeeper的一个ha是非常简单的,只需要在spark-env.sh中添加一句话即可。添加上如下内容:配置的时候保证下面语句在一行,否则配置不成功,每个-D参数使用空格分开。master挂掉,便无法对外提供新的服务,显然有单点故障问题,
2024-04-28 19:11:05
1218
原创 Spark-core面试知识点
针对列表当中的每一个元素进行操作,操作完成后返回一个新的列表,操作之前是多少个元素,操作之后还是多少个元素,不会增加,不会减少。根据RDD的执行流程构建DAG有向无环图,构建好后,采用回溯方法,从后往前推,遇到窄依赖包含到当前stage中,遇到宽依赖断开形成stage。窄依赖:父RDD当中的一个分区只能被子RDD当中的一个分区所依赖。宽依赖:父RDD当中的一个分区会被子RDD当中的多个分区所依赖。执行算子:带动转换算子运算,并将结果输出或保存到指定地点。特点:不可变,可分区,里面的元素可以并行计算的集合。
2024-04-25 17:08:00
459
1
原创 kafak知识总结(2)
第一个segment文件段默认命名是20位0,当分裂以后,就是用当前segment文件段当中.log文件当中第一条数据的偏移量命名。在kafka当中,生产者生产数据,是将数据保存到分区里面的segment文件段当中,但是segment文件段是逻辑存在的。每个segment文件段默认大小是1G,如果超过1G就会分裂出来第二个segment文件段,以此类推。1:生产者生产数据,只要leader保存成功,不管follower是否同步成功,继续发送下一批数据。kafka当中数据的默认保存时长是168个小时=7天。
2024-04-24 08:00:00
342
原创 fakak详解(2)
为保证producer发送的数据,能可靠的发送到指定的topic,topic的每个partition收到producer发送的数据后,都需要向producer发送ack(acknowledgement确认收到),如果producer收到ack,就会进行下一轮的发送,否则重新发送数据,如图-29所示。在.index文件中,存储的是key-value格式的,key代表在.log中按顺序开始第n条消息,value代表该消息的位置偏移。即使消息不在index记录中,在已有的记录中查找,范围也大大缩小了。
2024-04-23 18:46:53
817
原创 KaFak知识总结(1)
假如有3个消费者,每个消费者消费一个分区当中的数据;在kafka当中,有一个isr列表,这个列表维护所有分区的副本,当某一时刻,分区leader宕机了,isr列表就会从自身维护的副本当中选择一个最适合上位的副本上位成为leader,继续和producer和consumer进行通信。在kafka当中,每个分区都维护者独属于自己这个分区一份偏移量,分区当中,每条数据都有一个独有且唯一的偏移量,用来标记消息,将来如果这条消息被消费,就会进行记录偏移量,再来消费就会从上次消费的偏移量继续往后开始消费。
2024-04-23 08:58:41
687
原创 Kafak详解(1)
但遗憾的是,我们并没有看到刚刚生产的数据,这很好理解,比如新闻联播每晚7点开始了,结果你7点15才打开电视看新闻,自然7点到7点15之间的新闻你就会错过,如果你想要看这之间的新闻,那么就需要其提供回放的功能,幸运的是kafka不仅提供了从头开始回放数据的功能,还可以做到从任意的位置开始回放或者读取数据,这点功能是非常强大的。topic是kafka非常重要的核心概念,是用来存储各种类型的数据的,所以最基本的就需要学会如何在kafka中创建、修改、删除的topic,以及如何向topic生产消费数据。
2024-04-22 17:28:10
1407
原创 Scala详解(8)
当编译器对当前代码第一次编译失败的时候,会在当前的环境中查找能够让代码编译通过的方式,用于将当前的类型进行转换,进行二次编译,这个过程就称之为隐式转换隐式转换包含隐式函数、隐式参数和隐式类Scala运行的时候,自动加载Predef类,Predef类中定义了大量的隐式转换。
2024-04-19 18:14:52
716
原创 淘宝用户购物行为数据集
UserBehavior是阿里巴巴提供的一个淘宝用户行为数据集,用于隐式反馈推荐问题的研究。文件名称说明包含特征包含所有的用户行为数据用户ID,商品ID,商品类目ID,行为类型,时间戳本数据集包含了2017年11月25日至2017年12月3日之间,有行为的约一百万随机用户的所有行为(行为包括点击、购买、加购、喜欢)。数据集的组织形式和MovieLens-20M类似,即数据集的每一行表示一条用户行为,由用户ID、商品ID、商品类目ID、行为类型和时间戳组成,并以逗号分隔。列名称说明用户ID。
2024-04-17 19:24:36
1416
原创 Scala详解(6)
Scala中字符串同样分为可变字符串和不可变字符串,不可变字符串使用String来定义,可变字符串使用的是来定义// 可变字符串// Scala中既然将字符串看作是集合中的成员,那么字符串其实就是字符的集合str += 'a'// 产生一个新的字符串// 将结果转化为一个ArrayBuffer返回。
2024-04-17 18:32:15
1345
1
原创 Scala详解(5)
集合本质上就是一个用于存储1个到多个数据的容器。Seq(序列),Set(集合)和Map(映射)。基于这三大类,衍生出来众多的子类序列:元素有序可重复集合:元素无序不可重复映射:键值对结构数据在Scala中,所有的集合都混入了Iterable特质,意味着所有的集合都可以被迭代遍历Scala中的集合分为可变集合()和不可变集合(所谓的不可变集合,指的是集合被创建好之后,长度不可变,且其中的元素也不能改变。如果对不可变集合中的元素进行增删操作,那么不会改变原集合,而是会产生一个新的集合。
2024-04-16 17:08:32
640
2
原创 Scala详解(4)
定义类表示矩形(Rectangle),提供对外获取周长(girth)和面积(area)的函数,并且为这个矩形类提供一个子类表示正方形(Square)
2024-04-15 17:00:23
1027
1
原创 Scala详解(3)
在Scala中,依然是通过package来定义包package 包名// 例如注意:在Java中,一个.java文件中只能有一个package语句;在Scala中,允许定义多个package语句,根据定义顺序,后定义的包是前边包的子包// 方式一:// 方式二package pa// 方式三package pa// 方式四为了表示层级关系,还提供了嵌套风格注意:在Java中,package语句需要放在.java文件的第一行,Scala中不做要求。
2024-04-12 16:51:23
710
5
原创 Scala详解(2)
将一段逻辑进行封装便于进行重复使用,被封装的这段逻辑就是函数。在Scala中,必须通过def来定义函数基本语法def 函数名(参数列表) : 返回值类型 = {函数体return 返回值案例// 案例:定义函数计算两个整数的和// 标准写法// 因为在Scala中,所有的结构都必须有返回值// 所以在函数中,如果不指定,默认会将最后一行的计算结果作为返回值// 也因此可以省略return不写a + b// 如果函数体只有一句话,那么此时也可以省略{}不写。
2024-04-12 08:45:11
699
原创 Scala详解(1)
在Java中,基本类型、static等都不符合面向对象的规则。Scala作为一门完全面向对象的语言,不支持基本类型、static等Any,即所有的类都是Any的子类AnyVal(任意数值)和AnyRef(任意引用)。无论AnyVal还是AnyRef都是类AnyVal包含了常用的数据类型ByteShortIntLongFloatDoubleCharBooleanUnit:对应了Java中的void。当一个函数没有返回值的时候,返回值类型就是Unit。Unit只包含了一个对象,就是()
2024-04-10 18:35:28
979
1
原创 HBase详解(4)
Phoenix将类SQL在底层转化为HBase API操作来执行,所以Phoenix中的每一个字段对应了HBase的命令在Phoenix中,建表的时候需要指定一个或者多个字段作为主键,主键被映射成HBase的行键Phoenix在建表的时候,如果没有指定列族,那么这些列会默认被放入0列族注意:Phoenix会自动的将表明、列名等转化为大写形式,如果要保持小写形式,那么需要使用双引号来标记在HBase中,查询数据的时候,需要指定行键,通过行键来锁定数据。
2024-04-09 18:34:37
1120
1
原创 HBase详解(3)
Phoenix是Apache提供的基于HBase的JDBC的工具,提供了类SQL语言来操作HBasePhoenix进行数据分析的OLTP的框架,可以预HBase、Flume、Hive、Spark、Flink等框架进行集成特点优点:提供了类SQL语言来操作HBase的数据,降低了学习HBase的成本缺点:提供的语言并不是标准的SQL;底层是将SQL转化为HBase API操作,所以效率不如直接操作HBase。
2024-04-09 18:33:34
1247
2
原创 HBase详解(2)
在HBase中,会从行键方向上对表来进行切分,切分出来的每一个结构称之为是一个HRegion切分之后,每一个HRegion会交给某一个HRegionServer来进行管理。HRegionServer是HBase的从节点,每一个HRegionServer可以管理多个HRegion如果新建了一个表,那么这个表中只包含1个HRegion。
2024-04-07 16:30:40
1116
原创 HBase详解(1)
HBase是Yahoo!公司开发的后来贡献给了Apache的一套开源的、分布式的、可扩展的、基于Hadoop的非关系型数据库(),因此HBase并不支持SQL(几乎所有的非关系型数据库都不支持SQL),而是提供了一套单独的命令和API操作关系型数据库和非关系型数据库针对的数据是不同的关系型数据库存储的数据都是结构化数据,即同一个表中所有的数据的结构都是完全相同的,所以此时可以采用SQL(Structed Query Language,结构化查询语言)来进行查询。
2024-04-02 18:48:13
1599
原创 HBase(超级无敌详细PROMAX讲解版)
简介概述图-1 HBase图标HBase原本是由Yahoo!公司开发的后来贡献给了Apache的一套开源的、基于Hadoop的、分布式的、可扩展的非关系型数据库(Non-Relational Database),因此HBase不支持SQL(非关系型数据库基本上都不支持SQL),而是提供了一套单独的命令用于操作HBase。HBase本身是仿照了Google的BigTable(Google的论文<Google's Bigtable: A Distributed Storage Sys
2024-04-02 16:48:49
1571
原创 Hive详解(5)
textfileRCFileorcparquetavro和avro和将文件以序列形式来存储(序列化文件)如果不指定,那么HDFS默认将文件以textfile格式存储textfileavro和是行存储格式,RCFileorc和parquet是列存储格式textfile不支持修改(delete和update),但是列存储格式都支持delete和update操作,效率非常低。
2024-04-01 18:25:51
2348
原创 Hive详解(4)
聚合函数,例如sumavgmaxmin等移位函数:以当前行为基础,来处理第前n行的数据:以当前行为基础,来处理第后n行的数据ntile(n):要求数据必须有序,将有序的数据依次放入n个桶中,保证每个桶中的数据几乎一致,相差最多不超过1个排序函数row_number:数据排序之后,按顺序给数据进行编号,即使数据相同,也是给定不同的编号rank:数据排序之后,按顺序给数据进行编号,如果数据相同,则给定相同的序号,会产生空位dense_rank。
2024-03-30 09:45:27
1182
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人