我有一个按特定字段分组的大数据集,需要对每个字段进行描述性统计。假设数据集是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%的业务量),我应该怎么做?
这是我这份工作的星星之火:
暂无答案!
目前还没有任何答案,快来回答吧!