如何在Python Spark结构化流中使用foreach
来触发输出操作。
query = wordCounts\
.writeStream\
.outputMode('update')\
.foreach(func)\
.start()
def func():
ops(wordCounts)
答案 0 :(得分:4)
TL; DR 在pyspark中无法使用foreach
方法。
引用Spark Structured Streaming的official documentation(突出显示我的):
foreach操作允许对输出数据计算任意操作。从Spark 2.1开始,仅适用于Scala和Java 。
答案 1 :(得分:2)
Spark 2.4.0中添加了对Python中foreach接收器的支持,并且文档已更新:http://spark.apache.org/docs/latest/structured-streaming-programming-guide.html#using-foreach-and-foreachbatch
确保您具有该版本,现在可以执行以下操作:
def process_row(row):
# Process row
pass
query = streamingDF.writeStream.foreach(process_row).start()
答案 2 :(得分:1)
现在使用任何简单的技巧都不可能在foreach
中使用pyspark
,此外,在pyspark
中,update
输出模式只能用于调试。
我建议你在scala
中使用spark,这并不难学。
答案 3 :(得分:-1)
您可以改为使用DataFrame.foreach(f)。