spark代码需要很长时间才能返回查询帮我加快速度

3xiyfsfu  于 2021-06-26  发布在  Hive
关注(0)|答案(2)|浏览(324)

我目前正在运行一些Spark代码,我需要查询一个Dataframe,这是需要很长时间(超过1小时)每查询。我需要多次查询以检查Dataframe是否正确。
我对spark比较陌生,我知道spark使用延迟求值,这意味着命令只在我调用某个操作时执行(在我的例子中是.show())。
有没有一种方法可以对整个df执行一次此过程,然后快速调用数据?
目前,我将df保存为一个临时表,然后在beeline(hive)中运行查询。这似乎有点过分,因为我必须先将表保存在数据库中,这似乎是浪费时间。
我研究了以下函数 .persist , .collect 但是我对如何使用它们和如何向它们查询感到困惑。
我真的很想学习正确的方法。
非常感谢您的帮助!!

368yc8dk

368yc8dk1#

使用临时表(registertemptable(spark 1.6)或createorreplacetempview(spark2.x))不会“保存”任何数据。它只会创建一个使用spark会话的生命周期的视图。如果要保存表,应使用 .saveAsTable ,但我想这不是你要找的。
使用 .cache 相当于 .persist(StorageLevel.MEMORY) . 如果您的表太大,因此无法放入内存,则应使用 .persist(StorageLevel.MEMORY_AND_DISK) .
也有可能在集群中需要更多的节点。如果您在本地运行,请确保使用 --master local[*] 使用计算机上所有可用的内核。如果您运行在独立的集群上,或者使用像yarn或mesos这样的集群管理器,您应该确保所有必要的/可用的资源都分配给了您的作业。

xwmevbvl

xwmevbvl2#

是的,您可以使用 rddName.cache() (或 persists() ) . 关于rdd持久性的更多信息可以在这里找到

相关问题