Как получить общее количество записей за текущий час из таблицы поиска

У меня есть 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|
// +-----------+
Другие вопросы по тегам