Apache spark 如何使pyspark DAG并行运行

Apache spark 如何使pyspark DAG并行运行,apache-spark,pyspark,Apache Spark,Pyspark,我使用pyspark处理数据并生成一些指标(大约25/30)。生成相互独立的每个度量。由于公司的限制,我无法粘贴代码。但我的代码流如下所述 def metric1_job(): some operations Write data from above df def metric2_job() some operations Write data from above df def metric3_job() . . . def metric25_job()

我使用pyspark处理数据并生成一些指标(大约25/30)。生成相互独立的每个度量。由于公司的限制,我无法粘贴代码。但我的代码流如下所述

def metric1_job():
    some operations
    Write data from above df
def metric2_job()
    some operations
    Write data from above df
def metric3_job()
.
.
.
def metric25_job()
    some operations
    Write data from above df

if __name__ == "__main__":
Read Df 1
Read Df 2
Read Df 3
Read Df 4
Read Df 5

Some operations on above Df.
metric1_job(df1, df2, df3, df4, df5)
metric1_job(df1, df2, df3, df4, df5)
metric1_job(df1, df2, df3, df4, df5)
.
.
.
metric25_job(df1, df2, df3, df4, df5)
现在,pyspark在每个函数中写入时停止执行,然后在另一个函数中开始处理DAG。所有这些函数都是DAG,彼此不依赖。一个明显的解决方案是将其拆分到单独的文件中,并作为单独的作业运行。但我没有这个选择。有人能告诉我怎样才能让spark并行运行这些DAG,同时也并行编写

非常感谢您的帮助。由于串行处理,上述作业占用的时间太长

提前谢谢


Manish

尽管大多数火花动作本质上是同步的,比如说如果我们一个接一个地执行两个动作,它们总是像一个接一个地按顺序执行。可以异步执行的操作很少

在某些场景中,当Spark集群的资源没有被完全利用时,我们可以在不同的RDD上同时执行不同的异步操作

有异步操作,如:countAsync、collectAsync、takeAsync、foreachAsync和foreachPartitionAsync

在本例中,您可以在
foreachPartitionAsync
中实现逻辑

参考:


这些不是真正的工作。你在缓存东西吗?并行性是SPARK固有的,如果我将DFs合并,我可以在DAG输出中清楚地看到并行使用的4DF。我想你每次都会找人。请确认。没有缓存我的dfs。请理解我没有做任何工会。我知道火花里有平行性。在我的例子中,每个函数都是独立的DAG,它将数据保存到不同的位置。但是当我们将数据保存到df.write.format(“com.databricks.spark.avro”).save(output_location)时,它会等待。这只是UNION的一个例子。有趣的你是怎么开始工作的?提供的链接有用吗?我问,因为我更像一个斯卡拉人。我不知道该怎么做,但是如果你展示了代码,这会有所帮助,但这是不可能的。成功没有那么有用。对于scala,我不会面对这个问题。我正面临Pypark的问题,考虑到外部因素,这是一个艰难的要求。调用这个函数有帮助吗?但是如何提交作业呢?我只在spark shell中使用过pyspark,没有在纱线中使用过