我有一个结构化的流程序,可以对单词进行计数:
#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
但是显然,编译器抱怨选择方法与方法签名不匹配。
答案 0 :(得分:1)
所有参数都必须为Column
类型
这应该可以工作(将{{1}中的"timestamp"
替换为col("timestamp")
):
select