我有一个带有查找表数据的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()
答案 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|
// +-----------+