如何在pyspark使用foreach水槽?

时间:2018-01-11 07:16:03

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

如何在Python Spark结构化流中使用foreach来触发输出操作。

query = wordCounts\
    .writeStream\
    .outputMode('update')\
    .foreach(func)\
    .start()

def func():
    ops(wordCounts)

4 个答案:

答案 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)