我使用PySpark
中编写的以下函数来记录SQL表中的步骤。
def log_df_update(spark,IsComplete,Status,EndDate,ErrorMessage,RowCounts,StartDate,FilePath,tablename):
import pandas as pd
l = [(process_name_log.value,process_id_log.value,IsComplete,Status,StartDate,EndDate,ErrorMessage,int(RowCounts),FilePath)]
schema = (StructType([StructField("SourceName", StringType(), True),StructField("SourceID", IntegerType(), True),StructField("IsComplete", IntegerType(), True),StructField("Status", StringType(), True),StructField("StartDate", TimestampType(), True),StructField("EndDate", TimestampType(), True),StructField("ErrorMessage", StringType(), True),StructField("RowCounts", IntegerType(), True),StructField("FilePath", StringType(), True)]))
rdd_l = sc.parallelize(l)
log_df = spark.createDataFrame(rdd_l,schema)
log_df.withColumn("StartDate",from_utc_timestamp(log_df.StartDate,"PST")).withColumn("EndDate",from_utc_timestamp(log_df.EndDate,"PST")).write.jdbc(url=url, table=tablename,mode="append", properties=properties)
使用单独的函数使用JDBC连接加载创建此日志的SQL表。
我在流程中的每个步骤之后创建日志,无论是否失败或跟踪运行时间以及完成。因此,在每个步骤之前,我将当前时间存储在变量start_date
中。我不知道的是,正在处理或计算的步骤是花费时间还是记录过程状态需要时间。由于开始日期时间是从剪辑开始的那一刻开始,我不能说哪个是花时间。
要从SQL服务器中的同一个表中读取数据需要几秒钟,那么是否需要在同一时间写入表中?
我尝试在记录后运行explain()
,但这只会告诉记录本身之前发生的事情。如何跟踪PySpark中每个步骤所花费的时间。