2017-04-26 157 views
0

在SparkSQL程序中,運行約6億行,需要根據其中一列上運行的UDF的輸出過濾結果。以下哪一項表現會更好?SparkSQL - isIn()的性能與多重比較的比較

選項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()會帶來什麼影響。

您是否同意我的觀點?

回答

-2

我對Spark Sql沒有太多的經驗,但我只是在數百萬行數據之間進行連接,一個是isin,一個是equalsto。平等表現要好得多。對於我的實驗,isin花費了大約2-3小時,而平均花費了大約30分鐘。