按范围计数

时间:2016-01-07 22:29:44

标签: scala apache-spark

以下脚本可用于"计数"键

val nbr = List(1,2,2,3,3,3,4,4,4,4)
val nbrPairsRDD = sc.parallelize(nbr).map(nbr => (nbr, 1))

val nbrCountsWithReduce = nbrPairsRDD
  .reduceByKey(_ + _)
  .collect()

nbrCountsWithReduce.foreach(println)

它返回:

(1,1)
(2,2)
(3,3)
(4,4)

如果我们有两个范围1:2和3:4,如何修改为按范围而不是绝对值进行映射,并给出以下输出:

(1:2,3)
(3:4,7)

3 个答案:

答案 0 :(得分:1)

一个选项是将列表转换为double并使用直方图函数:

div#radio input[type="radio"] + label {
  border: 1px solid black;
}

div#radio input[type="radio"]:checked + label {
  border: 1px solid red;
}

答案 1 :(得分:0)

我能想到的一个简单方法是将键映射到各个范围,例如:

val nbrRangePairs = sc.parallelize(nbr)
                      .map(nbr => (computeRange(nbr), 1))
                      .reduceByKey(_ + _)
                      .collect()

// function to compute Ranges
def computeRange(num : int) : String = 
{
    if(num < 3)
       return "1:2"
    else if(num < 5)
       return "2:3"
    else
       return "invalid"

}

答案 2 :(得分:0)

以下是按范围计算聚合的代码段:

Set myXLApp = GetObject(, "Excel.Application")
'specify the History File
With myXLApp
.Workbooks("SR Historyv2.xlsx").Activate
End With