使用SparkSQL做简单业务计算时如何合理的分区读取以及合理的使用分区?
来源:6-9 -Dataset概述及使用
章鱼飞
2019-09-25
有个问题想请教下。SparkSQL的sql接口读取数据或者jdbc接口读取数据分2种,一种是没指定分区字段的,另外一种可以指定分区字段。问题是很多业务场景,表是没有ID数字字段、或者日期字段的,像加载近N年的数据、近N个月的数据,或者N个客户的数据,我们没法估算也没法使用日期做分区加载,没法指定使用指定分区字段如表中的主键数字字段来加载 ,这样子得到的一个Dataset.rdd分区数可以看到是=1的,那么使用这个rdd去计算,我们是否要重新分区再拿去做join操作或者map操作。这样子合理还是不要重新分区了或者说用什么办法,做指定字段来分区加载,不用考虑重新分区再计算?如果计算逻辑就是做一些表读取然后按照客户进行分组做一个map这种简单的ETL业务逻辑呢还有必要使用SparkSQL来完成吗或者说SparkSQL适合这种简单业务的ETL使用不?
1回答
-
Michael_PK
2019-09-25
1) 从设计角度看,每条数据,应该都会有一个类似时间的字段的,分区必然是通过这个时间字段在清洗完后落地的, 当然不一定是时间字段,也有可能是客户编号啥的。如果你们没有,那就是整个的架构设计就有一定的问题,因为没有,你处理的时候必然只能全量去扫,这是很忌讳的事情
2)是否需要重新分区,这取决于你们的数据量是否大,是否会存在数据倾斜的可能,如果有,那么势必需要重新分区
3) 离线的一般操作步骤就是:第一步是etl,不管采用spark或者mr或者flink等其他框架,其实就是一个map操作,将每条进来的日志进行补齐等操作,然后将etl后的数据作为后续统计分析操作的输入数据进行业务分析
022019-09-25
相似问题