字数统计窗口

时间:2019-06-09 17:30:58

标签: scala apache-spark

我有一个结构化的流程序,可以对单词进行计数:

#1
var inputTable = spark.readStream.format("kafka")
      .option("kafka.bootstrap.servers", "XX.XX.XXX.XX:9092")
      .option("subscribe", "topic-name")
      .option("startingOffsets", "earliest")
      .load()

#2
val df = inputTable.select(explode(split($"value".cast("string"), "\\s+")).as("word"))
  .groupBy($"word")
  .count

#3
val query = df.select($"word", $"count").writeStream.outputMode("complete").format("console").start()

#4
query.awaitTermination()

现在,我想按事件时间(在输入表中有一个“时间戳”列)对其进行窗口化。

所以我需要更改#2。我尝试过:

val df = inputTable.select(explode(split($"value".cast("string"), "\\s+")).as("word"), "timestamp")
      .groupBy(window($"timestamp", "1 minute", $"word"))
      .count

但是显然,编译器抱怨选择方法与方法签名不匹配。

1 个答案:

答案 0 :(得分:1)

所有参数都必须为Column类型

这应该可以工作(将{{1}中的"timestamp"替换为col("timestamp")):

select