Scala Spark получить среднее значение каждого временного интервала - PullRequest
0 голосов
/ 16 октября 2018

мой вход - это фрейм данных Spark:

EventTime,Signal
0,-65
10,-63
20,-71
40,-65
50,-62
80,-81
90,-84
100,-81
...
85460,-71
85480,-66
85490,-89
85500,-80

Я хотел бы получить среднее значение сигнала для каждых 900 секунд EventTime, вывод выглядит так:

EventTime, MeanSignal
0, mean 
900, mean 
1800, mean
...
85500, mean

Моя проблема в том, что в обычных данных нет обычного шага EventTime, поэтому я не могу разбить фрейм данных на части одинаковой длины ...

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Хорошо, вот мое решение, спасибо другим постам: я создал столбец Bucket, связанный с модулем EventTime, для создания категорий, а затем я сгруппировал корзины и взял среднее значение

    val df = data_input.withColumn("Bucket", toBucketUDF(col("EventTime")))

    val finalDF = df.groupBy("Bucket")
      .agg(mean("RSSI"))
      .withColumnRenamed("avg(RSSI)", "RSSI")
      .orderBy("Bucket")
      .withColumn("EventTime", getTimeUDF(col("Bucket")))
      .drop("Bucket")



    finalDF

  }

  def toBucket(input:Int): Int = {
    val Bucket = input/900
    return Bucket
  }
  def getTime(input: Int): Int = {
    val time = (input+1) * 900
    return time
  }

  val toBucketUDF = udf(toBucket _)
  val getTimeUDF = udf(getTime _)
0 голосов
/ 17 октября 2018

Вы можете добавить новый столбец как EventTime / 900 и сгруппировать его по этому столбцу.Примерно так.

val map = Map(0 -> -65 , 10 -> -63 , 20 -> -71 , 40 -> -65 , 50 -> -62 , 80 -> -81 , 90 -> -84 , 100 -> -81 , 85460 -> -71 , 85480 -> -66 , 85490 -> -89 , 85500 -> -80)

val df = map.toSeq.toDF("EventTime", "Signal")
  .withColumn("EventTimeGrp", (col("EventTime")/lit(900)).cast("int"))
  .groupBy("EventTimeGrp").agg(mean("Signal").as("MeanSignal"))
  .withColumn("EventTime", col("EventTimeGrp")*lit(900))
  .drop("EventTimeGrp")

Результаты выглядят так.EventTime 0 представляет значения от 0 до 899 и т. Д.

+------------------+---------+ | MeanSignal|EventTime| +------------------+---------+ |-75.33333333333333| 84600| | -71.5| 0| | -80.0| 85500| +------------------+---------+

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...