
spark
文章平均质量分 66
没有文化,啥也不会
这个作者很懒,什么都没留下…
展开
-
spark对接hudi遇到的坑
1.spark-sql读写MOR 的hudi表spark版本:2.4.3hudi版本:0.9.0按照官网文档可正常独写cow表,但读写mor时报错:Caused by: org.apache.hudi.exception.HoodieException: Unable to load class at org.apache.hudi.common.util.ReflectionUtils.getClass(ReflectionUtils.java:57) at org.apache..原创 2021-12-06 14:34:35 · 5871 阅读 · 0 评论 -
Spark:distinct算子会把所有数据拉到Driver吗?
前言在大数据中写SQL时,通常不使用distinct关键字,因为这样效率较低。但是看到spark core中有一个distinct算子,官网上介绍用于返回一个不含重复元素的dataset。目前在打算用spark core解析json,并动态生成hive表,就需要对所有json数据的key做去重,reduce、reduceByKey、groupByKey都可以实现,但是实现起来都得转换成pairs rdd。打算用distinct算子,又怕数据倾斜,所以看看distinct的源码。distinct([n原创 2021-03-01 16:21:21 · 774 阅读 · 0 评论 -
Spark:3.0版本报错“java.lang.NoSuchFieldError: JAVA_9“
spark 3.0 版本在创建SparkSession时报错:Exception in thread "main" java.lang.NoSuchFieldError: JAVA_9 at org.apache.spark.storage.StorageUtils$.<init>(StorageUtils.scala:207) at org.apache.spark.storage.StorageUtils$.<clinit>(StorageUtils.sca...原创 2021-02-18 15:30:49 · 6747 阅读 · 0 评论 -
Spark-SQL:spark3.0后BROADCAST、SHUFFLE_MERGE、SHUFFLE_HASH三种调优参数
https://www.24tutorials.com/spark/joins-spark-sql-shuffle-hash-sort-merge-broadcast/https://github.com/apache/spark/pull/24164Spark 3.0 之后,对Spark-SQL增加了三种join选项:SHUFFLE_HASH, SHUFFLE_MERGE , SHUFFLE_REPLICATE_NL。(原先只有BROADCAST 一种)SHUFFLE_HASH(随机散列.原创 2021-01-05 13:34:40 · 1527 阅读 · 0 评论 -
spark:计算LTV3
需求以下是hive表,请通过Spark Code于每日凌晨计算注册用户的LTV3,需要考虑查看单区服维度的LTV3。最终报表将以BI展示。LTV3定义:注册角色在注册3天(含当天)的总充值金额除以当天注册用户数。注册用户表:dwd_regserver_id role_id log_time log_date int str timestamp date 区服ID 角色ID 注册时间 分区键、注册日期 用户充值表:dwd_tra原创 2020-10-14 11:44:21 · 1260 阅读 · 1 评论 -
spark:计算订单中所有商品是否属于套包
需求计算订单中,所包含的商品(单品)是否可以组成套包,且得出这个套包在这个订单中的个数。即:假设某套包的商品为(a,b,c),某订单中购买了(a,b,c,d,a,b,c)五个商品,则这个订单中包含2个这个套包。之前是将套包维度表和订单事实表进行笛卡尔积,然后用hive的UDF函数计算,但是在实际使用过程中发现速度很慢。了解到spark 2.0之后的第二代钨丝计划对spark内部函数进行了大量优化,可能性能会比hive的UDF函数好点。考虑进行重构,使用spark的UDF函数进行计算。再此之前先使原创 2020-09-16 13:40:45 · 537 阅读 · 0 评论 -
spark:报错com.esotericsoftware.kryo.KryoException: Buffer underflow.
场景spark-sql跑一个较大的任务(几亿条数据),数据落盘时报错:com.esotericsoftware.kryo.KryoException: Buffer underflow.探索查看抛出这个报错的源码:https://github.com/apache/spark/blob/ebdf41dd698ce138d07f63b1fa3ffbcc392e7fff/core/src/main/scala/org/apache/spark/serializer/KryoSerialize原创 2020-09-07 22:11:37 · 6147 阅读 · 0 评论 -
大数据:缓慢变化维
create table ldltmp.test_scd_dwd( id int, name string)stored as parquet;create table ldltmp.test_scd_dws( id int, name string, start_date string, end_date string, is_current_flag tinyint)stored as parquet;create...原创 2020-09-01 22:02:15 · 1192 阅读 · 0 评论 -
小记:记一次sort merge join导致的数据倾斜
场景同事的一张订单表,三年共2亿条左右数据,在join多张维度表后,写回hive中。发现每次任务都耗时三小时左右。而我的另一张表,数据量也在2亿左右,同样join了多张维度表,耗时仅6分钟。同事的任务:我的任务:数据量排查首先到spark的历史服务web页面,找到这条任务,查看时哪个job耗时比较长,发现有个job耗时2小时:查看这个job的执行计划,发现左边的大表有99G数据,而右边的小表仅16M数据,但是使用了sort merge join。在spark co原创 2020-08-31 11:11:29 · 1472 阅读 · 0 评论 -
spark-sql:将查询结果输出到文件
方法一:在linux命令行提交spark-sql,将执行结果写入文件全量刷写:spark-sql -S -e "select * from ldltmp.mars_smb_ba" > result.txt追加写:spark-sql -S -e "select * from ldltmp.mars_smb_ba" >> result.txt方法二:在spark-shell,将df写入到本地文件在集群模式下,最好将结果写入到HDFS,因为你不知道rdd的数.原创 2020-07-20 12:06:36 · 8513 阅读 · 0 评论 -
spark-sql:自定义UDF函数进行敏感字段加密解密
需求一些用户数据中包含诸如用户手机号等信息,直接暴露出来的话,是违法的。。。需要对数据进行脱敏,如果单纯的将手机号替换为***号,那么就意味着丢失用户的手机号数据了,因为无法再将***变回手机号。所以需要自定义UDF函数,实现敏感数据的加密解密。这里实现了两个UDF函数,一个用于加密,一个用于解密。使用Java自带的crypto模块实现AES加密。(高级加密标准(英语:Advanced Encryption Standard,缩写:AES),是一种区块加密标准。这个标准用来替代原先的DES,已经原创 2020-07-08 23:42:01 · 5242 阅读 · 3 评论 -
spark-sql的olap函数
Table of ContentsGROUPING SETSGROUPING__IDROLLUPCUBEspark-sql和支持在线多维分析函数,这里介绍几个比较常用的函数:grouping sets,grouping__id,rollup和cube。准备数据ldldwd.ec_tm_business_store表:businessID businessName ID1 CPD 113 ...原创 2020-06-19 12:15:54 · 1429 阅读 · 0 评论 -
spark-sql子查询的字段名在父查询中无法解析
场景:多表join、union时,发生如下报错:Error in query: Resolved attribute(s) complex_flag_code#6549,quantity#6551L,pay_time_date#6547,sales_price#6553,oms_code#6548,retail_price#6550,promotion_sku_code#6552 missing from retail_price#6178,source_platform_code#6384,prom原创 2020-06-17 16:30:54 · 6761 阅读 · 0 评论 -
spark不支持hive表分区字段中存在大写字母
建表语句:DROP TABLE IF EXISTS ldldwd.ec_jd_intransit_detail;CREATE TABLE IF NOT EXISTS ldldwd.ec_jd_intransit_detail( DataLable string, DocumentNumber string, CurrentRecordNumber int, VendorProductID string, BuyerProductID str原创 2020-05-22 11:45:43 · 1824 阅读 · 0 评论 -
spark-sql读取不到parquet格式的hive表
当向Hive metastore中读写Parquet表时,Spark SQL将使用Spark SQL自带的Parquet SerDe(SerDe:Serialize/Deserilize的简称,目的是用于序列化和反序列化),而不是用Hive的SerDe,Spark SQL自带的SerDe拥有更好的性能。这个优化的配置参数为spark.sql.hive.convertMetastoreParquet,默认值为开启。所以有时会发生spark自带的序列化方式无法解析hive中的parquet数据,便读不到数据原创 2020-05-19 12:00:33 · 3141 阅读 · 0 评论 -
hive on spark 读取json数据失败
昨天帮朋友分析了个问题:hive on spark场景下,使用json数据格式存储文件,使用hive自带的序列化方式。当计算引擎为mr时,可以正常读取,使用spark引擎时报错。建表语句如下:报错如下:看到这个报错,估计是序列化和反序列化方式不匹配导致的,查看日志,果然是因为找不到反序列化器。日志报错如下:解决思路:1.将hive序列化方式的jar包添加到spark的lib目录下。2.建表时使用自定义的序列化方式,并将自定义序列化方式的jar包分别放进hive和spark原创 2020-05-19 10:52:49 · 1577 阅读 · 0 评论