如何从查找表中获取当前小时的记录总数

时间:2016-11-21 06:19:33

标签: scala dataframe apache-spark-sql

我有一个带有查找表数据的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]失败:   ``联盟''期待但是`('发现

     

从erv

中选择sum(reccount)over(partition by hour)作为running_total

我也尝试过类似下面的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 个答案:

答案 0 :(得分:0)

如果您只需filter来获得合适的时间并agg,就不确定为什么要使用窗口函数:

val upTo = 4.0
val result = input.filter($"hour" <= upTo).agg(sum($"count") as "Total Count")

result.show()
// +-----------+
// |Total Count|
// +-----------+
// |         50|
// +-----------+