在一个运行大约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()
从内存中的图形数据库中读取。
本能地,我说只运行一次UDF会更好,但我不知道运行isIn()
会有什么影响。
你同意我的说法吗?
答案 0 :(得分:-2)
我没有很多使用Spark Sql的经验,但我只是在数百万行数据之间进行了连接,一次使用isin,然后再次使用相同的数据。相等的表现要好得多。对于我的实验,isin需要大约2-3小时,而相同的时间大约需要30分钟。