为了获得更好的性能,应该使用哪个查询,加入sql还是使用datasetapi?

nwnhqdif  于 2021-06-09  发布在  Hbase
关注(0)|答案(7)|浏览(405)

在使用spark从hbase获取和操作数据时, *Spark sql join**spark dataframe join* -哪一个更快?

x759pob2

x759pob21#

我没有访问集群的权限来进行适当的测试,但我认为sparksql只会编译成本机Dataframe代码。
我听说的经验法则是,sql代码应该用于产品代码的探索和Dataframe操作。

slwdgvem

slwdgvem2#

rdd总是优于dataframe和sparksql,但根据我的经验,dataframe的性能比sparksql好。与spark sql相比,dataframe函数的性能更好。下面的链接将对此给出一些见解。
spark rdds vs dataframes vs sparksql

vm0i2vca

vm0i2vca3#

sparksql带来了一个强大的新优化框架catalyst。使用catalyst,spark可以自动转换sql查询,以便它们更高效地执行。
Dataframe是组织成命名列的数据集。它在概念上相当于关系数据库中的一个表或r/python中的一个Dataframe,但具有更丰富的优化,它提供了RDD(强类型、使用强大lambda函数的能力)的优点和spark sql优化的执行引擎的优点。
执行速度将是相同的,因为它们使用相同的优化算法。

yhuiod9q

yhuiod9q4#

如果连接可以在查询之间共享,那么使用rdd仔细实现连接可能是一个不错的选择。但是,如果不是这样的话,就让spark/catalyst完成它的工作,并在sparksql中连接。它将完成所有的优化。这样就不必维护连接逻辑等。

zpf6vheq

zpf6vheq5#

据我所知,他们的表现应该是一样的。sql在内部将作为Dataframe工作

lb3vh1jj

lb3vh1jj6#

sparksql连接和sparkdataframe连接几乎是一样的。连接实际上是在引擎盖下委托给rdd操作的。在rdd操作的基础上,我们还提供了sparksql、Dataframe或数据集等方便的方法。在sparksql的情况下,它需要花费很少的额外时间来解析sql。
应该更多地根据良好的编程实践来评估它。我喜欢dataset,因为编译时可以捕捉语法错误。场景后面的编码负责压缩数据和执行查询。

r6hnlfcb

r6hnlfcb7#

我用spark对cassandra上的sql和dataframe做了一些性能分析,我认为hbase也会这样。
据我所知,sql比dataframe方法工作得更快。这背后的原因可能是在dataframe方法中涉及了很多java对象。在sql方法中,一切都是在内存中完成的。
附加结果。

相关问题