火花函數對UDF性能的影響?SPARK現在提供了預定義的函數,可以在數據倉庫中使用,而且看起來它們是高度優化的。我最初的問題是哪個更快,但我自己做了一些測試,發現火花函數至少在一個例子中快了10倍。有誰知道為什么會這樣,以及什么時候UDF會更快(僅在存在相同火花函數的情況下)?下面是我的測試代碼(運行在Databricks社區ed上):# UDF vs Spark functionfrom faker import Factoryfrom pyspark.sql.functions import lit, concat
fake = Factory.create()fake.seed(4321)# Each entry consists of last_name, first_name, ssn, job, and age (at least 1)from pyspark.sql import Rowdef fake_entry():
name = fake.name().split()
return (name[1], name[0], fake.ssn(), fake.job(), abs(2016 - fake.date_time().year) + 1)# Create a helper function to call a function repeatedlydef repeat(times, func, *args, **kwargs):
for _ in xrange(times):
yield func(*args, **kwargs)data = list(repeat(500000, fake_entry))print len(data)data[0]dataDF = sqlContext.createDataFrame(data, ('last_name', 'first_name', 'ssn', 'occupation', 'age'))dataDF.cache()UDF功能:concat_s = udf(lambda s: s+ 's')udfData = dataDF.select(concat_s(dataDF.first_name).alias('name'))udfData.count()火花功能:spfData = dataDF.select(concat(dataDF.first_name, lit('s')).alias('name'))spfData.count()運行兩次,UDF通常需要1.1-1.4秒,而火花concat函數總是在0.15秒以下。
2 回答

慕村9548890
TA貢獻1884條經驗 獲得超4個贊
什么時候UDF會更快
有誰知道這是為什么
DataFrame
添加回答
舉報
0/150
提交
取消