如何在Spark Structured Streaming - Java8上将数据集<row>写入kafka输出主题

时间:2017-04-04 14:03:31

标签: apache-spark java-8 spark-structured-streaming

我试图在Spark 2.1它的界面中使用ForeachWriter接口,但我不能使用它。

2 个答案:

答案 0 :(得分:1)

它将在Spark 2.2.0中得到支持。要了解如何使用它,建议您阅读此博文:this part of the documentation

您可以尝试使用Spark 2.2.0 RC2 [1]或等待最终版本。

如果您不能使用Spark 2.2.0 +:

,另一个选择是看一下这个博客

https://databricks.com/blog/2017/04/26/processing-data-in-apache-kafka-with-structured-streaming-in-apache-spark-2-2.html

它有一个非常简单的Kafka水槽,也许这对你来说足够了。

[1] https://databricks.com/blog/2017/04/04/real-time-end-to-end-integration-with-apache-kafka-in-apache-sparks-structured-streaming.html

答案 1 :(得分:0)

首先要知道的是,如果您使用Spark结构化Stream并处理流数据,那么您将拥有一个流式数据集。

话虽如此,编写此流式数据集的方法是通过调用 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)
     */
   }