Apache spark 在写入雪花之前保存Spark数据帧
我在PySpark工作,在得到最终输出表之前,我做了一系列转换并应用了用户定义的函数,我正在为Snowflake编写输出表。写入Snowflake的最后一个命令运行大约需要25分钟,因为它也在执行所有计算,因为Spark的计算是惰性的,直到最后一次调用才进行计算。 我希望在之前的步骤中计算最终的表,以便计算所有转换所需的时间,然后分别计算写入雪花步骤所需的时间。我怎样把两者分开?我曾尝试:Apache spark 在写入雪花之前保存Spark数据帧,apache-spark,pyspark,lazy-evaluation,Apache Spark,Pyspark,Lazy Evaluation,我在PySpark工作,在得到最终输出表之前,我做了一系列转换并应用了用户定义的函数,我正在为Snowflake编写输出表。写入Snowflake的最后一个命令运行大约需要25分钟,因为它也在执行所有计算,因为Spark的计算是惰性的,直到最后一次调用才进行计算。 我希望在之前的步骤中计算最终的表,以便计算所有转换所需的时间,然后分别计算写入雪花步骤所需的时间。我怎样把两者分开?我曾尝试: temp = final_df.show() temp.write.format(SNOWFLAKE_
temp = final_df.show()
temp.write.format(SNOWFLAKE_SOURCE_NAME).options(**sfOptions2) \
.option("dbtable","TEST_SPARK").save()
但我得到了一个错误:
'NoneType' object has no attribute 'write'
'list' object has no attribute 'write'
和collect()
但我得到了一个错误:
'NoneType' object has no attribute 'write'
'list' object has no attribute 'write'
您的
temp
数据帧具有.show()
的结果,该结果不会导致temp变量的任何类型,并且只有dataframe
具有.write
方法
尝试以下代码:
temp = final_df
#view records from temp dataframe
temp.show()
temp.write.format(SNOWFLAKE_SOURCE_NAME).options(**sfOptions2) \
.option("dbtable","TEST_SPARK").save()
import time
start_time = time.time()
#code until show()
temp = final_df
#view records from temp dataframe
temp.show()
end_time = time.time()
print("Total execution time for action: {} seconds".format(end_time - start_time))
start_time_sfw = time.time()
#code until show()
final_df.write.format(SNOWFLAKE_SOURCE_NAME).options(**sfOptions2) \
.option("dbtable","TEST_SPARK").save()
end_time_sfw = time.time()
print("Total execution time for writing to snowflake: {} seconds".format(end_time_sfw - start_time_sfw))
更新:
temp = final_df
#view records from temp dataframe
temp.show()
temp.write.format(SNOWFLAKE_SOURCE_NAME).options(**sfOptions2) \
.option("dbtable","TEST_SPARK").save()
import time
start_time = time.time()
#code until show()
temp = final_df
#view records from temp dataframe
temp.show()
end_time = time.time()
print("Total execution time for action: {} seconds".format(end_time - start_time))
start_time_sfw = time.time()
#code until show()
final_df.write.format(SNOWFLAKE_SOURCE_NAME).options(**sfOptions2) \
.option("dbtable","TEST_SPARK").save()
end_time_sfw = time.time()
print("Total execution time for writing to snowflake: {} seconds".format(end_time_sfw - start_time_sfw))
说得好。但是第一步仍然会导致.show()步骤花费约25分钟,然后写入步骤花费约25分钟,因为它再次执行所有计算。我想在写信给你之前强制进行评估Snowflake@user3242036,是的,这是spark
.show()
的预期行为。action会触发所有要执行的转换,调整作业dotemp=final\u df.cache()
然后执行temp.show()
现在,作业不会花费1到25分钟的时间。要计算所用时间,请使用time
package。检查我的更新答案!谢谢我使用了cache()选项,它似乎起了作用