我想从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 writer的目的是什么?只是为了在编写时获得更多控制权?
答案 0 :(得分:1)
foreach()操作是一个动作。
它不返回任何值。
它在RDD的每个元素上执行输入功能
引用Spark结构化流的spark official documentation
流查询当前绑定到单个接收器,因此多路复用 无法通过相同的流查询使用现有接收器进行写入。 在当前的功能实现中,您将有效地处理数据两次。就个人而言,我仍然不建议这样做,您可以按照 小批量,然后使用foreach或自定义接收器 写卡夫卡主题和镶木地板来源