我有一个从kafka流创建的数据框。我想将其减小为单个值,然后在程序中使用该单个值。
```scala
import sparkSession.implicits._
val df = sparkSession
.readStream
.format("kafka")
.option("kafka.bootstrap.servers", ...)
.option("subscribe", "theTopic")
.load()
val result = df
.selectExpr("CAST(value AS STRING) as json")
.map(json => getAnInt(json))
.reduce { (x, y) =>
if (x > y) x else y
}
someOtherFunction(result)
```
我希望将流减少为一个值,然后可以在程序的其余部分中使用它。相反,它失败并显示:
org.apache.spark.sql.AnalysisException:具有流源的查询必须使用writeStream.start();执行; 卡夫卡 在org.apache.spark.sql.catalyst.analysis.UnsupportedOperationChecker $ .throwError(UnsupportedOperationChecker.scala:389) 在org.apache.spark.sql.catalyst.analysis.U ...
答案 0 :(得分:1)
您只能在流数据帧上使用writeStream
。我不确定您是否打算使用此流数据框架。如果删除readStream
并改用read
,则可以解决此问题!