Pyspark结构化流媒体应用程序在控制台中打印每个文件的执行时间

Pyspark结构化流媒体应用程序在控制台中打印每个文件的执行时间,pyspark,spark-structured-streaming,Pyspark,Spark Structured Streaming,我想测量执行时间,并从应用程序本身分析Pyspark结构化流。例如,我想用 from pyspark import SparkContext from pyspark.sql import SparkSession from pyspark.sql.types import StructType import time if __name__ == "__main__": sc = SparkSession.builder.master('spark://localhost:7

我想测量执行时间,并从应用程序本身分析Pyspark结构化流。例如,我想用

from pyspark import SparkContext
from pyspark.sql import SparkSession
from pyspark.sql.types import StructType
import time   

if __name__ == "__main__":

    sc = SparkSession.builder.master('spark://localhost:7077').getOrCreate()
    df = sc.readStream.schema(pq_schema).parquet('../data/parquet')
    df.createOrReplaceTempView("vw_table")
    exec_query = sc.sql("""
            select sum(field_1), count(field_2), field_3 from vw_table group by field_3
    """)
    result_q = df_st.writeStream.outputMode("complete").format("console").start()
    result_q.awaitTermination()  

然后我会将一个文件复制到文件夹中,并每次检查每个文件。是否可以从Python脚本执行此操作?

出于测试目的,您可以减少每个触发器的文件数:

df=sc.readStream.schema(pq\u schema)\
.选项(“maxFilesPerTrigger”,1)\
.parquet(“../data/parquet”)
然后在Spark UI中找到每个批次的持续时间。 或者,您可以在每个槽中添加时间戳(用于本地测试)。不推荐使用此代码,并且它并不总是正常工作。这是一个快速的攻击

从日期时间导入日期时间
startTime=datetime.now()
batchId=1
def批次持续时间(df,历元id):
全局开始时间,batchId
打印(“批处理{}={}的处理时间”。格式(batchId,datetime.now()-startTime))
startTime=datetime.now()
batchId+=1
结果_q=df_st.writeStream\
.outputMode(“完成”)\
.foreachBatch(批次持续时间)\
.start()\
.终止