在spark中执行saveastable操作的save部分之前是否完成了所有转换?

pftdvrlh  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(336)

在我的应用程序中,我对我的数据集做了一些转换,如mappartition、filter、drop等,最后执行以下操作

inputDf.write()
       .format(Constants.FORMAT)
       .mode(Constants.MODE)
       .option("path", Constants.PATH)
       .saveAsTable(Constants.TABLENAME);

我知道当遇到saveastable时,spark将开始完成转换执行。所以,我想了解inputdf是在save-to-hive开始之前完全求值的(所有转换都完成了),还是在数据集的部分求值完成之后才开始?
我一直在网上搜索这个,但找不到答案。有人能帮我吗?

nzrxty8p

nzrxty8p1#

转换是将rdd数据从一种形式转换为另一种形式的操作。当您在任何rdd上应用此操作时,您将得到一个带有转换数据的新rdd(spark中的rdd是不可变的)。像map、filter、flatmap等操作都是变换。
当您在任何rdd上应用转换时,它不会立即执行该操作。它将使用应用的操作、源rdd和用于转换的函数创建一个dag(有向无环图)。它将继续使用引用构建这个图,直到您对最后一个排列的rdd应用任何操作为止。这就是spark中的转换是懒惰的原因。
所以在您的例子中,inputdf在调用action saveastable之前经历了不同的转换在您的例子中,在转换期间,spark执行引擎将只创建dag。这里dag意味着它将评估转换的执行计划。当saveastable操作发生时,它将开始执行已创建的dag。所以在调用saveastable方法之前不会发生部分求值,要回答您的问题,是的,在配置单元表中保存数据是从最后开始的,在转换完成之后,否则您将在配置单元表中发现混乱的结果。您可以检查资源管理器url上的dag以确认这一点。

相关问题