Spark代码需要很长时间才能返回查询。帮助加快这一进程

时间:2018-03-12 12:21:43

标签: apache-spark hive beeline

我目前正在运行一些Spark代码,我需要查询每个查询花费很长时间(超过1小时)的数据框。我需要多次查询以检查数据帧是否确实正确。

我对Spark相对较新,我理解Spark使用延迟评估,这意味着只有在我调用某些操作时才执行命令(在我的情况下 .show())。

有没有办法为整个DF执行一次此过程,然后快速调用数据?

目前我将DF保存为临时表,然后以直线(HIVE)运行查询。这似乎有点矫枉过正,因为我必须首先将表保存在数据库中,这似乎是浪费时间。

我查看了以下函数.persist.collect,但我对如何使用它们并从中查询感到困惑。

我真的想学习正确的方法。

非常感谢您的帮助!!

2 个答案:

答案 0 :(得分:0)

是的,您可以使用rddName.cache()(或persists())将 RDD保留在内存中。可以找到有关 RDD持久性的更多信息here

答案 1 :(得分:0)

使用临时表(registerTempTable(spark 1.6)或createOrReplaceTempView(spark2.x))不会"保存"任何数据。它只会创建一个具有生命周期的视图。如果你想保存表格,你应该使用.saveAsTable,但我认为这不是你想要的。

使用.cache相当于.persist(StorageLevel.MEMORY)。如果您的桌子很大,因此无法放入内存,则应使用.persist(StorageLevel.MEMORY_AND_DISK)

您也可以简单地在群集中需要更多节点。如果您在本地运行,请确保使用--master local[*]进行部署以使用计算机上的所有可用内核。如果您在独立群集或Yarn或Mesos等集群管理器上运行,则应确保为您的作业分配所有必需/可用资源。