第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

火花函數(shù)對UDF性能的影響?

火花函數(shù)對UDF性能的影響?

回首憶惘然 2019-07-17 16:44:57
火花函數(shù)對UDF性能的影響?SPARK現(xiàn)在提供了預定義的函數(shù),可以在數(shù)據倉庫中使用,而且看起來它們是高度優(yōu)化的。我最初的問題是哪個更快,但我自己做了一些測試,發(fā)現(xiàn)火花函數(shù)至少在一個例子中快了10倍。有誰知道為什么會這樣,以及什么時候UDF會更快(僅在存在相同火花函數(shù)的情況下)?下面是我的測試代碼(運行在Databricks社區(qū)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函數(shù)總是在0.15秒以下。
查看完整描述

2 回答

?
慕村9548890

TA貢獻1884條經驗 獲得超4個贊

什么時候UDF會更快

如果您詢問PythonUDF,答案可能是永遠不會*。由于SQL函數(shù)相對簡單,而且不是為復雜的任務設計的,因此它幾乎不可能補償Python解釋器和JVM之間重復序列化、反序列化和數(shù)據移動的成本。

有誰知道這是為什么

上面已經列舉了主要的原因,可以歸結為一個簡單的事實,即星火。DataFrame它本身就是一個JVM結構,標準的訪問方法是通過對JavaAPI的簡單調用來實現(xiàn)的。另一方面,UDF是用Python實現(xiàn)的,需要來回移動數(shù)據。

雖然PySPark通常需要JVM和Python之間的數(shù)據移動,但是對于低級別的RDDAPI,它通常不需要昂貴的serde活動。SPARK SQL增加了序列化和序列化的額外成本,以及將數(shù)據從JVM上轉移到不安全表示的成本。后者是針對所有UDF(Python、Scala和Java)的,但前者是針對非本地語言的。

與UDF不同,SparkSQL函數(shù)直接在JVM上運行,通常與催化劑和鎢都集成得很好。這意味著可以在執(zhí)行計劃中對其進行優(yōu)化,并且大多數(shù)情況下可以從cocogen和其他鎢優(yōu)化中獲益。此外,它們還可以對其“本機”表示中的數(shù)據進行操作。

因此,在某種意義上,這里的問題是PythonUDF必須將數(shù)據帶到代碼中,而SQL表達式則相反。


*根據粗略估計PySPark窗口UDF可以擊敗Scala窗口函數(shù)。


查看完整回答
反對 回復 2019-07-17
  • 2 回答
  • 0 關注
  • 782 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號