我有一个hdfs集群上的(表格)数据,需要对它进行一些稍微复杂的查询。我预计未来会多次遇到同样的情况,还有其他数据。因此,问题:
在执行此类任务时,选择在哪里使用(纯)Spark和在哪里使用Spark SQL需要考虑哪些因素
以下是我能想到的选择因素:
-
熟悉语言:在我的情况下,我更像是一个数据分析师,而不是数据库管理员,所以这会让我使用spark:我更愿意考虑如何在Java/Scala中(有效地)实现数据选择,而不是在SQL中。然而,这主要取决于查询。
-
序列化:我认为可以运行Spark SQL查询,而无需将自制的jar+dep发送给Spark worker(?)。但是,返回的数据是原始的,应该在本地进行转换。
-
效率:我不知道两者之间有什么不同。
我知道这个问题对SO来说可能太笼统了,但可能不是。那么,任何有更多知识的人都能提供一些见解吗?
关于第3点,根据您的输入格式,当您使用纯Spark和Spark SQL时,扫描数据的方式可能会有所不同。例如,如果您的输入格式有多列,但您只需要其中的几列,则可以使用Spark SQL跳过检索,而在纯Spark中实现这一点有点困难。
除此之外,Spark SQL还有一个查询优化器,当使用DataFrame或查询语句时,生成的查询将通过优化器,以便更有效地执行。
Spark SQL不排除Spark;组合使用可能会获得最佳效果。