Apache spark 如何在pyspark中的结构化流作业中运行映射转换
我正在尝试使用map()转换设置一个结构化流作业,该转换可以调用RESTAPI。详情如下: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:
(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即可