SparkSQL - 与多重比较相比,isIn()的性能

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SparkSQL - 与多重比较相比,isIn()的性能相关的知识,希望对你有一定的参考价值。

在运行大约6亿行的SparkSQL程序中,我需要根据在其中一列上运行UDF的输出来过滤结果。以下哪项会表现更好?

选项A.

val result = myDataframe
        .filter((callUDF("getPrice", $"product") equalTo 1) || (callUDF("getPrice", $"product") equalTo 5))

选项B.

val result = myDataframe
        .filter(callUDF("getPrice", $"product").isIn(1,5))

product是一个字符串,getPrice()从内存中的图形DB中读取。

本能地,我会说只运行一次UDF会更好,但我不知道运行isIn()会有什么影响。

你同意我的说法吗?

答案

我没有很多使用Spark Sql的经验,但我只是在数百万行数据之间进行了连接,一次使用isin,然后再次使用相同的数据。相等的表现要好得多。对于我的实验,isin需要大约2-3小时,而相等的大约需要30分钟。

以上是关于SparkSQL - 与多重比较相比,isIn()的性能的主要内容,如果未能解决你的问题,请参考以下文章

SparkSQL与Hive on Spark的比较

Python loc + isin 返回 FutureWarning(元素比较失败)

在字节跳动,一个更好的企业级SparkSQL Server这么做

071 SparkStreaming与SparkSQL集成

何时需要多重比较校正?

sparkStreaming结合SparkSql实例