火花流foreach多个作家

Posted

技术标签:

【中文标题】火花流foreach多个作家【英文标题】:spark streaming foreach multiple writer 【发布时间】: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 作家的目的是什么?只是为了在写作时进行更多控制吗?

【问题讨论】:

【参考方案1】:

foreach() 操作是一个动作。

它不返回任何值。

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

引用 Spark Structured Streaming 的 spark official documentation

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

【讨论】:

以上是关于火花流foreach多个作家的主要内容,如果未能解决你的问题,请参考以下文章

如何在foreach中序列化jdbc连接以进行火花节点分布

Pyspark 结构化流处理

tcl之控制流-foreach

KnockoutJS 3.X API 第四章 数据绑定 控制流foreach绑定

结构化流 - Foreach接收器

同一列表中的多个 ForEach 与具有一个 ForEach 的多个列表