请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

使用SparkSQL做简单业务计算时如何合理的分区读取以及合理的使用分区?

有个问题想请教下。SparkSQL的sql接口读取数据或者jdbc接口读取数据分2种,一种是没指定分区字段的,另外一种可以指定分区字段。问题是很多业务场景,表是没有ID数字字段、或者日期字段的,像加载近N年的数据、近N个月的数据,或者N个客户的数据,我们没法估算也没法使用日期做分区加载,没法指定使用指定分区字段如表中的主键数字字段来加载 ,这样子得到的一个Dataset.rdd分区数可以看到是=1的,那么使用这个rdd去计算,我们是否要重新分区再拿去做join操作或者map操作。这样子合理还是不要重新分区了或者说用什么办法,做指定字段来分区加载,不用考虑重新分区再计算?如果计算逻辑就是做一些表读取然后按照客户进行分组做一个map这种简单的ETL业务逻辑呢还有必要使用SparkSQL来完成吗或者说SparkSQL适合这种简单业务的ETL使用不?

正在回答 回答被采纳积分+3

1回答

Michael_PK 2019-09-25 11:07:02

1) 从设计角度看,每条数据,应该都会有一个类似时间的字段的,分区必然是通过这个时间字段在清洗完后落地的, 当然不一定是时间字段,也有可能是客户编号啥的。如果你们没有,那就是整个的架构设计就有一定的问题,因为没有,你处理的时候必然只能全量去扫,这是很忌讳的事情

2)是否需要重新分区,这取决于你们的数据量是否大,是否会存在数据倾斜的可能,如果有,那么势必需要重新分区


3) 离线的一般操作步骤就是:第一步是etl,不管采用spark或者mr或者flink等其他框架,其实就是一个map操作,将每条进来的日志进行补齐等操作,然后将etl后的数据作为后续统计分析操作的输入数据进行业务分析

0 回复 有任何疑惑可以回复我~
  • 提问者 章鱼飞 #1
    关于1) ,像一些行里的表数据,就是使用的UUID,但是这个UUID不适合做分区加载,因为分区加载的字段要求是数字类型,所以考虑到这些已经有的表,使用Spark来做聚合计算,总觉得不合适。所以想请教下这方面的合理处理
    回复 有任何疑惑可以回复我~ 2019-09-25 11:09:56
  • Michael_PK 回复 提问者 章鱼飞 #2
    绝大部分都是用时间字段来处理的,不管离线还是实时,一般都有时间字段,否则数据错了如何修复呢
    回复 有任何疑惑可以回复我~ 2019-09-25 15:03:57
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信