Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 在写入雪花之前保存Spark数据帧_Apache Spark_Pyspark_Lazy Evaluation - Fatal编程技术网

Apache spark 在写入雪花之前保存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_

我在PySpark工作,在得到最终输出表之前,我做了一系列转换并应用了用户定义的函数,我正在为Snowflake编写输出表。写入Snowflake的最后一个命令运行大约需要25分钟,因为它也在执行所有计算,因为Spark的计算是惰性的,直到最后一次调用才进行计算。 我希望在之前的步骤中计算最终的表,以便计算所有转换所需的时间,然后分别计算写入雪花步骤所需的时间。我怎样把两者分开?我曾尝试:

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会触发所有要执行的转换,调整作业do
temp=final\u df.cache()
然后执行
temp.show()
现在,作业不会花费1到25分钟的时间。要计算所用时间,请使用
time
package。检查我的更新答案!谢谢我使用了cache()选项,它似乎起了作用