如何在pyspark的不同模块中使用相同的连接Dataframe

sycxhyv7  于 2021-06-24  发布在  Hive
关注(0)|答案(2)|浏览(461)

我们有这样一个场景:从多个源表中读取数据,根据业务规则进行连接并应用Map。在某些情况下,从几个表中读取的数据可以用于多个目标加载。因此,为了避免在运行不同的模块时多次读取相同的数据,有没有选择如何在不同的pyspark模块中使用相同的Dataframe输出。

df1 = spark.sql(select * from table1)
df2 = spark.sql(select * from table2)

df_out = df1.join(df2, ['customer_id'], inner)

我想在pyspark\u module1.py和pyspark\u module2.py中使用df\u out,有没有办法不多次读取相同的数据,因为我们是通过调度工具并行运行程序。

rqqzpn5f

rqqzpn5f1#

您可以加入和预处理到一定程度,并通过 bucketBy 然后在这个预连接和预处理的数据上并行运行下游。
这个https://luminousmen.com/post/the-5-minute-guide-to-using-bucketing-in-pyspark 像spark文档一样提供指导。

ubof19bj

ubof19bj2#

这就是 cache() 以及 persist() 出现在画面中 cache() 将数据保存到内存中(这是默认值),直到saprk应用程序执行并 persist() 允许您将您的选择扩展到磁盘/内存等。完全读取这里和这里
现在,来回答您的问题—您可能需要根据实现的方式重新审视您的应用程序逻辑 catch 或者 persist 如果,你写在 main function 还有你的 module-1 以及 module-2 函数调用主函数,即使在缓存到内存中之后,也可能没有什么好处,因为每次发生函数调用时,它都会调用特定函数调用的底层逻辑,因此请尝试是否可以使用相同的代码并利用 caching.

相关问题