我正在尝试在使用全局临时视图和使用存储之间进行选择
在 spark 应用程序之间传递数据。 (更具体地说是在数据块笔记本之间)
我想了解查询的准确评估时间,以及数据或查询计划是如何传递的。
假设我在两个 spark 应用程序 A 和 B 之间传递了一个数据框。
如果在 A 中创建全局临时视图时执行查询,数据如何传递给 B?通过记忆?
如果它在 B 上执行,A 传递的查询计划是否也包含有关如何以及在何处读取数据源的信息和凭证?
我试着计时工作来测试这个:
在答:
t1 =time.time()
df = spark.read.parquet(*paths)
t2 =time.time()
df = df.filter((F.col('createdate') >= F.lit(start)) & (F.col('createdate') < F.lit(end)))
t3 = time.time()
df.show()
t4 = time.time()
df.createOrReplaceGlobalTempView('testview')
t5 = time.time()
print(t2-t1, t3-t2, t4-t3, t5-t4)
输出:16.02s、0.15s、1.96s、0.014s
B:
t1 = time.time()
sqlContext.table('global_temp.testview').show()
print(time.time()-t1)
输出:
show()
在 A 上:2.16sshow()
:2.30s
根据测试结果,似乎在创建视图的那一刻没有执行任何操作,只传递了查询计划。
这引出了一个问题,B 何时以及如何访问数据源
spark.read.parquet(*paths)
?
我找不到任何关于这个的文档,我正在寻找任何确定知道的人
谢谢。