Apache spark 如何在spark中使用Structured Streaming 2.3.0进行无状态聚合,而不使用flatMapsGroupWithState?
如何在spark中使用结构化流2.3.0进行无状态聚合,而不使用flatMapsGroupWithState或Dstream API?寻找一种更具声明性的方式 例如:Apache spark 如何在spark中使用Structured Streaming 2.3.0进行无状态聚合,而不使用flatMapsGroupWithState?,apache-spark,apache-spark-sql,spark-structured-streaming,Apache Spark,Apache Spark Sql,Spark Structured Streaming,如何在spark中使用结构化流2.3.0进行无状态聚合,而不使用flatMapsGroupWithState或Dstream API?寻找一种更具声明性的方式 例如: 从一些视图中选择count(*) 我希望输出只计算每个批中可用的任何记录,而不是前一批的聚合要在spark中使用Structured Streaming 2.3.0进行无状态聚合,而不使用flatMapsGroupWithState或Dstream API,可以使用以下代码- import spark.implicits._
从一些视图中选择count(*)
我希望输出只计算每个批中可用的任何记录,而不是前一批的聚合要在spark中使用Structured Streaming 2.3.0进行无状态聚合,而不使用
flatMapsGroupWithState
或Dstream API,可以使用以下代码-
import spark.implicits._
def countValues = (_: String, it: Iterator[(String, String)]) => it.length
val query =
dataStream
.select(lit("a").as("newKey"), col("value"))
.as[(String, String)]
.groupByKey { case(newKey, _) => newKey }
.mapGroups[Int](countValues)
.writeStream
.format("console")
.start()
我们现在做的是-
datastream
-newKey
中添加了一列。我们这样做是为了使用groupByKey
在上面执行groupBy
。我使用了一个文本字符串“a”
,但您可以使用任何东西。此外,您需要从datastream
中的可用列中选择任何列。我已经选择了value
列。为此,您可以选择任何人countValues
,通过编写it.length
来计算由groupByKey
函数聚合的值我希望有帮助 我正在寻找问题中所述的声明性方式,因此我尝试使用原始sql字符串解决问题,这意味着没有映射函数,除非它们可以用作原始sql的一部分@user1870400我不熟悉任何声明方式。如果选择文字“a”,整个流不会成为一个组吗?@user1870400是的,它会。有没有办法在映射组内创建静态数据帧?假设mapGroups提供了行的迭代器。我只想用迭代器填充一个静态数据帧。可能吗?