【问题标题】:spark streaming foreach multiple writer火花流foreach多个作家
【发布时间】:2018-08-16 13:57:01
【问题描述】:

我希望从 JSON 文件中读取结构化流,处理数据并将数据写入 Kafka 和 Parquet 接收器。我在下面看到相同的示例代码

datasetOfString.writeStream.foreach(new ForeachWriter[String] {
 def open(partitionId: Long, version: Long): Boolean = {
   // open connection
 }

 def process(record: String) = {
   // write string to connection
 }

 def close(errorOrNull: Throwable): Unit = {
   // close the connection
 }
})

但是我怎样才能在这里传递多个作家呢?像下面这样吗?

datasetOfString.writeStream.foreach(kafkaWriter).start()
datasetOfString.writeStream.foreach(parquetWriter).start()

如果我这样做,那么使用 foreach 作家的目的是什么?只是为了在写作时进行更多控制吗?

【问题讨论】:

    标签: scala apache-spark apache-spark-sql spark-structured-streaming


    【解决方案1】:

    foreach() 操作是一个动作。

    它不返回任何值。

    它对RDD的每个元素执行输入函数

    引用 Spark Structured Streaming 的 spark official documentation

    流式查询当前绑定到单个接收器,因此多路复用 不可能通过相同的流式查询使用现有接收器进行写入。 在您当前的功能实现中,您将有效地处理数据两次。就个人而言,我仍然不推荐这个,您可以根据需要处理数据 微批处理,然后使用 foreach 或自定义接收器 写入 Kafka 主题和 parquet 源

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-27
      • 2019-04-02
      • 2016-02-07
      • 2015-05-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多