spark中大型数据集上的多个度量

k97glaaz  于 2021-05-26  发布在  Spark
关注(0)|答案(0)|浏览(151)

我有一个按特定字段分组的大数据集,需要对每个字段进行描述性统计。假设数据集是200m+个记录,我需要运行大约15个stat函数-sum/avg/min/max/stddev等等。问题是,由于没有明确的方法来划分数据集,所以很难扩展该任务。
示例数据集:

+------------+----------+-------+-----------+------------+
| Department | PartName | Price | UnitsSold | PartNumber |
+------------+----------+-------+-----------+------------+
| Texas      | Gadget1  |     5 |       100 |       5943 |
| Florida    | Gadget3  |   484 |      2400 |       4233 |
| Alaska     | Gadget34 |    44 |       200 |       4235 |
+------------+----------+-------+-----------+------------+

现在我这样做(示例):

columns_to_profile = ['Price', 'UnitSold', 'PartNumber']

    functions = [
        Function(F.mean, 'mean'),
        Function(F.min, 'min_value'),
        Function(F.max, 'max_value'),
        Function(F.variance, 'variance'),
        Function(F.kurtosis, 'kurtosis'),
        Function(F.stddev, 'std'),
        Function(F.skewness, 'skewness'),
        Function(count_zeros, 'n_zeros'),
        Function(F.sum, 'sum'),
        Function(num_hist, "hist_data"),
    ]

functions_to_apply = [f.function(c).alias(f'{c}${f.alias}')
                        for c in columns_to_profile for f in get_functions(column_types, c)]

df.groupby('Department').agg(*functions_to_apply).toPandas()

这里的问题是函数列表比这大(大约有16-20个),这适用于每一列,但是集群的大部分时间都花在洗牌上,cpu负载大约为5-10%。
我应该如何划分这些数据,或者我的方法可能不正确?
如果各部门有偏差(即德克萨斯州有90%的业务量),我应该怎么做?
这是我这份工作的星星之火:

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题