Apache spark 如何将数据集写入Spark Structured Streaming-Java8上的kafka输出主题

Apache spark 如何将数据集写入Spark Structured Streaming-Java8上的kafka输出主题,apache-spark,java-8,spark-structured-streaming,Apache Spark,Java 8,Spark Structured Streaming,我试图在Spark 2.1中使用ForeachWriter接口,但我无法使用它。Spark 2.2.0将支持它。要了解如何使用它,我建议您阅读以下博文: 您可以尝试Spark 2.2.0 RC2[1],也可以等待最终版本 如果您不能使用Spark 2.2.0+,另一个选择是查看此博客: 它有一个非常简单的卡夫卡水槽,也许对你来说就足够了 [1] 首先要知道的是,如果您使用spark结构化流并处理流数据,您将拥有一个流数据集 也就是说,编写流式数据集的方法是调用ForeachWriter,这是对的

我试图在Spark 2.1中使用ForeachWriter接口,但我无法使用它。

Spark 2.2.0将支持它。要了解如何使用它,我建议您阅读以下博文:

您可以尝试Spark 2.2.0 RC2[1],也可以等待最终版本

如果您不能使用Spark 2.2.0+,另一个选择是查看此博客:

它有一个非常简单的卡夫卡水槽,也许对你来说就足够了


[1] 首先要知道的是,如果您使用spark结构化流并处理流数据,您将拥有一个流数据集

也就是说,编写流式数据集的方法是调用ForeachWriter,这是对的

  import org.apache.spark.sql.ForeachWriter
  val writer = new ForeachWriter[Commons.UserEvent] {
  override def open(partitionId: Long, version: Long) = true
  override def process(value: Commons.UserEvent) = {
  processRow(value)
 }
 override def close(errorOrNull: Throwable) = {}
 }

 val query =
 ds.writeStream.queryName("aggregateStructuredStream").outputMode("complete").foreach(writer).start
写入主题的函数如下所示:

    private def processRow(value: Commons.UserEvent) = {
     /*
     *  Producer.send(topic, data)
     */
   }

我在用Java 8,但谢谢你,伙计。稍后我将尝试:在Java8中实现这段代码一点也不困难。您将拥有一个ForeachWriter write=new ForeachWriterclasz。其余的都是私有的void。我现在就让你去做