最近学习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, 总是返回一个桶