只是想知道是否有人有任何想法的方法来协调转换步骤内的Spark作业使用气流。
大多数包含spark作业的气流演示似乎遵循定义dag的相同过程,dag如下所示:
> A: trigger to pick up a file from an S3
> B: move the file to a different S3 location
> C: run a spark job to create an aggregate extract
> D: send the extract out, e.g. via email
我试图理解的是,也有可能利用气流来协调Spark作业本身的内部工作。为简单起见,etl spark作业可能类似于
> C1: spark.read.csv(xxxx)
> C2: transform dataframe with function transform_1()
> C3: transform dataframe with function transform_2()
> C4: transform dataframe with function transform_3()
> C5: write dataframe to S3
所有这些c步骤都需要在同一spark作业中运行,因为它们在同一spark dag上运行。如果作业中的每个任务都被视为气流dag的一部分,则气流将为a、b、c1、c2、c3、c4、c5、d。
根据所处理的数据,可能需要选择不同的变换函数。如果我们可以将转换函数定义为气流任务,那就太好了,因此对于不同的数据集,dag可能是a、b、c1、c2、c4、c5、c7、d。
是否有办法定义dag并有效地将子dag委托给spark,让spark驱动程序知道并能够与airflow进行通信,以确定下一步运行哪个功能并将更新反馈给airflow,从而使dag随着进度而更新?
注:我知道,在很多情况下,pyspark中转换函数的调用会很快,因为它只是构建一个spark dag,实际上在spark dag被操作之前不会花费任何时间-这个问题的目的是通过使用气流定义spark dag的组成,并能够跟踪其进度。我还知道,如果其中一个c任务在spark中失败,在大多数情况下,所有前面的c任务(即整个子dag)都需要重新运行。
非常感谢您的阅读,我期待着听到您的想法。
戴夫
暂无答案!
目前还没有任何答案,快来回答吧!