Как получить общее количество записей за текущий час из таблицы поиска
У меня есть DataFrame с данными таблицы поиска, для каждого часа в этой таблице будет запись. Как рассчитать общее количество записей до текущего часа?
Например, мои данные DF
+----+-----+
|hour|count|
+----+-----+
|0.00| 10|
|1.00| 5|
|2.00| 10|
|3.00| 15|
|4.00| 10|
|5.00| 10|
+----+-----+
Если я передам "4,00" в качестве ввода, он должен вернуть общее количество до 4 часов.
Ожидаемый результат:
Total count
50
Пример кода, который я пробовал:
val df = Seq(("0.00", "10"),
("1.00", "15")).toDF("hour", "reccount")
df.show
df.printSchema
df.registerTempTable("erv")
//sqlContext.sql("select hour,reccount from erv").show
sqlContext.sql("select sum(reccount) over(partition by hour) as running_total from erv").show
Но я получаю ошибку ниже.
Исключение в потоке "main" java.lang.RuntimeException: сбой [1.26]: ``union'' ожидается, но `('найдено
выберите сумму (пересчет) более (разделить по часам) как running_total из erv
Я также попробовал функции Window, как показано ниже, но он ожидает, что HiveContext должен быть создан, когда я пытаюсь создать HiveContext локально, но не создает HiveContext.
код оконной функции:
val wSpec = Window.partitionBy("hour").orderBy("hour").rowsBetween(Long.MinValue, 0)
df.withColumn("cumSum", sum(df("reccount")).over(wSpec)).show()
1 ответ
Не уверен, почему вы хотите использовать функции окна, если вы можете просто filter
чтобы получить правильные часы и agg
:
val upTo = 4.0
val result = input.filter($"hour" <= upTo).agg(sum($"count") as "Total Count")
result.show()
// +-----------+
// |Total Count|
// +-----------+
// | 50|
// +-----------+