Apache spark 如何在pyspark中的结构化流作业中运行映射转换

Apache spark 如何在pyspark中的结构化流作业中运行映射转换,apache-spark,spark-streaming,Apache Spark,Spark Streaming,我正在尝试使用map()转换设置一个结构化流作业,该转换可以调用RESTAPI。详情如下: (1) df=spark.readStream.format('delta') \ .option("maxFilesPerTrigger", 1000) \ .load(f'{file_location}') (2) respData=df.select("resource", "payload").rdd.map(lambda row:

我正在尝试使用map()转换设置一个结构化流作业,该转换可以调用RESTAPI。详情如下:

(1)
df=spark.readStream.format('delta') \
.option("maxFilesPerTrigger", 1000) \
.load(f'{file_location}') 

(2)
respData=df.select("resource", "payload").rdd.map(lambda row: put_resource(row[0], row[1])).collect()
respDf=spark.createDataFrame(respData, ["resource", "status_code", "reason"])

(3)
respDf.writeStream \
.trigger(once=True) \
.outputMode("append") \
.format("delta") \
.option("path", f'{file_location}/Response') \
.option("checkpointLocation", f'{file_location}/Response/Checkpoints') \
.start()
但是,我得到了一个错误:在步骤(2)中,必须使用writeStream.start()执行流源查询


任何帮助都将不胜感激。谢谢。

您还必须在df上执行流 意思是df.writeStream.start()

这里有一个类似的线索:


您的意思是不可能在readStream和writeStream之间的rdd上运行一些映射转换?您不仅仅是在运行映射转换。您正在收集结果并将其作为输入来创建新的数据帧。事实上,您有两个流正在运行,您应该同时启动这两个流。如果要在流数据帧上执行转换,只需执行spark.readStream..load().map().writeStream.start即可