Spark foeach对Java Map没有影响

时间:2017-04-12 08:07:35

标签: java scala apache-spark spark-dataframe

我想在Apache Spark 2.1中迭代一个DataSet,我有这个方法遍历foreach中的所有行,我想要做的是拥有一个Java map,其中activity是键和一个数组一天中的分钟包含在所有日子中该特定分钟内发生的活动的频率,但由于Spark的工作方式,它将不会像这样工作。如何制作以下代码,以便我可以获得每个活动的地图或数据集,每个活动具有每分钟的出现次数(一分钟的出现位于startMinuteInDay和period + startMinuteInDay之间。

def make_frequencies(dataset: Dataset[Row]): java.util.HashMap[String, Array[Int]] = {
  var freq_map = new java.util.HashMap[String, Array[Int]]
  val activities = List("Sleeping", "Toileting", "Showering", "Snack", "Breakfast", "Leaving","Grooming","Spare_Time/TV","Lunch","Dinner")

  for(a <- activities){
    freq_map.put(a, new Array[Int](1440))
  }
  dataset.foreach(r => {
    val period = r.getDouble(2).toInt
    val startMinInDay = r.getDouble(3).toInt
    val activity = r.getString(4)
    println(" period " + r.getDouble(2) + " activity "+r.getString(4))

    var i = startMinInDay
    val end = startMinInDay + period
    print()
    while(i <= end && i < 1440){
      freq_map.get(activity)(i) += 1
      i+=1
    }
  })
  freq_map
}

0 个答案:

没有答案