我有一个格式元组数组
Input: Array[(Long,Double)]
arr = Array[(1,3),(2,5),(3,9),(4,10),(5,3)]
现在我想对数据进行一些分类。这是我遵循的算法:
当bin大小超过指定大小时,将创建一个新bin。
If bin size is assumed to be 1
Output: Array[(1,0),(5,0),(2,1),(3,2),(4,3)]
目前,我可以通过列表中的简单迭代将每个值与之前的值进行比较,并跟踪箱尺寸。是否有任何有效的方法来实现这一点,尤其是在scala中?
答案 0 :(得分:1)
嗯..让我们说你知道箱子的大小(你可以得到箱子的数量)或箱子的数量。
val numBins = 3
val arr = Array[(1,3),(2,5),(3,9),(4,10),(5,3)]
// sc is the SparkContext
val arrRdd = sc.parallelize( arr )
val sortedRdd = arrRdd.sortBy( ( t: ( Int, Int) ) => t._2 )
val binnedRdd = sortedRdd.repartition( numBins ).glom
现在,binnedRdd
将为RDD[ Array[ (Int, Int) ] ]
,其中每个数组都是您的bin。