在分组RDD(Spark)上调用.stats()

时间:2015-05-26 14:22:46

标签: python apache-spark pyspark

我有一个RDD,我目前正在使用combineByKey分组并计算基本的描述性统计数据(count,sum,std,mean等)。它工作正常,但看起来像RDD.stats()函数将做我需要的。

现在,我正在做以下事情:

text_file = sc.textFile(input_source_file)
text_file.flatMap(zonal.zonal_stats)\
        .combineByKey(first_combiner, new_merge, final_combine)\
        .map(lambda (label, (value_sum, count, mx, mn)): "{},{},{},{},{},{},{}".format(label, value_sum, count, value_sum / count, mx, mn, mx - mn))\
        .saveAsTextFile(output_path)

如何将combineByKey替换为开箱即用的.stats()函数,并为每个组获取基本统计信息?

1 个答案:

答案 0 :(得分:0)

Double RDDs上的统计数据功能未按群组定义。我建议使用Spark SQL的DataFrames,因为它们具有在分组数据上定义的汇总统计数据聚合函数。

另一种选择是使用类似于使用stats()类定义StatsCounter的方式来执行您自己的缩减逻辑。