Apache spark 在spark中,是否可以重用数据帧';s将其应用于不同数据源的执行计划
我有一个有点复杂的管道-pyspark,它需要20分钟来制定执行计划。由于我必须使用不同的数据帧(作为源)多次执行同一管道,我想知道是否有任何选项可以避免每次构建执行计划?一次生成执行计划并将其与不同的源数据重用?`这是不可能的,因为源数据帧影响应用于计划的优化的执行。正如@EnzoBnl所指出的,这是不可能的,因为钨应用了特定于对象的优化。相反,您可以做的是(如果数据可能的话)将您的大文件分割成更小的块,这些块可以在多个输入数据帧之间共享,并对它们使用Apache spark 在spark中,是否可以重用数据帧';s将其应用于不同数据源的执行计划,apache-spark,pyspark,Apache Spark,Pyspark,我有一个有点复杂的管道-pyspark,它需要20分钟来制定执行计划。由于我必须使用不同的数据帧(作为源)多次执行同一管道,我想知道是否有任何选项可以避免每次构建执行计划?一次生成执行计划并将其与不同的源数据重用?`这是不可能的,因为源数据帧影响应用于计划的优化的执行。正如@EnzoBnl所指出的,这是不可能的,因为钨应用了特定于对象的优化。相反,您可以做的是(如果数据可能的话)将您的大文件分割成更小的块,这些块可以在多个输入数据帧之间共享,并对它们使用persist()或checkpoint(
persist()
或checkpoint()
。
具体地说,checkpoint
通过存储一个中间点来缩短执行计划,但无法重用。
看
数据检查点-将生成的RDD保存到可靠的存储中。在一些跨多个批处理组合数据的有状态转换中,这是必需的。在这种转换中,生成的RDD依赖于以前批处理的RDD,这导致依赖链的长度随着时间的推移而不断增加。为了避免恢复时间的无限增长(与依赖链成比例),有状态转换的中间RDD定期检查到可靠存储(例如HDF),以切断依赖链
有一种方法可以满足您的要求,但它需要对Spark内部结构的深入理解。星火计划只是对象的树。这些树不断地被火花改变。它们可以在火花的“外部”被“敲打”和转化。细节中有很多魔鬼,因此我不推荐这种方法,除非你有强烈的需求 在去那里之前,重要的是查看其他选项,例如: