pyspark-histogram详解

来源:互联网 发布:淘宝手机如何发布宝贝 编辑:程序博客网 时间:2024/06/18 07:33

最近学习Spark我主要使用pyspark api进行编程,

网络上中文的解释不是很多,api官方文档也不是很容易明白,我结合自己的理解记录下来,方便别人参考,也方便自己回顾吧

本次介绍的是 pyspark.RDD.histogram

histogram(buckets)

输入参数buckets可以是一个数字,也可以是一个列表

输出结果为一个元组,元组包含两个列表分别是桶和直方图

例如:对一个0到50的序列组成的列表,

buckets是数字时

>>> rdd = sc.parallelize(range(51))>>> rdd.histogram(2)([0, 25, 50], [25, 26])
参数buckets是2,输出两部分,[0,25,50]是,[25,26]是各个桶分布内的频数

buckets是列表时

>>> rdd.histogram([0, 5, 25, 50])([0, 5, 25, 50], [5, 20, 26])
参数buckets是[0,5,25,50],输出两部分,[0,5,25,50]是桶,[5,20,26]是各个桶分布内的频数

>>> rdd = sc.parallelize(["ab", "ac", "b", "bd", "ef"])>>> rdd.histogram(("a", "b", "c"))(('a', 'b', 'c'), [2, 2])

总结以下几点:

1、histogram 用来根据给定的参数buckets,计算直方图分布结果, buckets参数可以是一个数字,也可以是一个列表

2、所有直方图的结果集合区间右边是开区间,最后一个区间除外

      例如 : 结果[0,25, 50] 表示的桶结果是 [0,25),[25,50],   即,0 <= x < 25, 25 <= x <= 50

3、桶必须是排好序的, 并且不包含重复元素, 至少有两个元素

      例如: 结果[0,25,50]是从小到大有序的,且至少包含两个元素

4、如果参数buckets是一个数字,它会生成一个由RDD的最大值和最小值之间均匀分布的桶,

      例如: 如果最小值是0, 最大值是100, 给定buckets等于2,桶的结果是[0,50),[50,100]

      如果RDD包含无穷大,buckets必须至少是1

      如果RDD中的元素不变,min等于max, 总是返回一个桶

0 0