摘要
ods
层是高度聚合的数据, 经常需要将一张大表拆分为多张小表.
hive
的分表基本只能依靠when
, 通过多次遍历完成过滤, 但由于spark
可以指定分区, 于是考虑借助自定义分区后, 借助分区直接对表进行拆分
先说结论: 思路失败, 建议选择filter
或者when
完成分表
本文用于记录思路和简析randomSplit
方法
思路
如果api
中有相应的方法, 可以直接拆分单表为多表, 那么该方法返回的结果, 应该是一个rdd
, dataset
或者dataframe
的集合.
于是查找了相关的api
, 发现还真有一个:
def randomSplit(weights: Array[Double]): Array[Dataset[T]] = {
randomSplit(weights, Utils.random.nextLong)
}
该方法传入一个全正数的Double数组, 将Dataset按对应百分比进行随机切分.
我们的需求是按照分区进行切分, 说不定可以借鉴下该方法. 于是追了下源码
源码
// seed是随机数的种子
def randomSplit(weights: Array[Double], seed: Long): Array[Dataset[T]] = {
// 对Double数组进行健壮性判断