Spark UDF's contain the following functions: nullable, deterministic, dataType, etc. So according to this information, it would benefit from optimizations such as ConstantFolding. Which other optimizations does it benefit from and which optimizations can it not benefit from? I ask this because many presentations present UDFs as a black box which does not benefit from catalyst optimizations, but clearly, it benefits from ConstantFolding.
Which optimizations do UDFs not benefit from?
805 Views Asked by abden003 At
1
There are 1 best solutions below
Related Questions in APACHE-SPARK
- Why does Azure Auto-Scale scale go lower then minimum amount of instances?
- Data execution plan ended with error on DB restore
- Why does Azure CloudConfigurationManager.GetSetting return null
- Do I need other roles than Worker Role for a web site and service layer in Azure?
- Azure Web App PATH Variable Modification
- Azure Data Factory: LinkedService for AzureSql in failed state
- How To Update a Web Application In Azure and Keep The App Up the whole time
- Using Azure MobileServices library with my own LAN WebApi
- ionCube loader error on Azure IIS
- App crash (if closed) after click on notification
Related Questions in APACHE-SPARK-SQL
- Why does Azure Auto-Scale scale go lower then minimum amount of instances?
- Data execution plan ended with error on DB restore
- Why does Azure CloudConfigurationManager.GetSetting return null
- Do I need other roles than Worker Role for a web site and service layer in Azure?
- Azure Web App PATH Variable Modification
- Azure Data Factory: LinkedService for AzureSql in failed state
- How To Update a Web Application In Azure and Keep The App Up the whole time
- Using Azure MobileServices library with my own LAN WebApi
- ionCube loader error on Azure IIS
- App crash (if closed) after click on notification
Related Questions in CATALYST-OPTIMIZER
- Why does Azure Auto-Scale scale go lower then minimum amount of instances?
- Data execution plan ended with error on DB restore
- Why does Azure CloudConfigurationManager.GetSetting return null
- Do I need other roles than Worker Role for a web site and service layer in Azure?
- Azure Web App PATH Variable Modification
- Azure Data Factory: LinkedService for AzureSql in failed state
- How To Update a Web Application In Azure and Keep The App Up the whole time
- Using Azure MobileServices library with my own LAN WebApi
- ionCube loader error on Azure IIS
- App crash (if closed) after click on notification
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Popular # Hahtags
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
Spark handles UDF's by wrapping them inside of a class. For example when you write the following:
What the
udf
function does is create aUserDefinedFunction
class which in its apply function creates aScalaUDF.
ScalaUDF extends Expression, and in its doCodeGen method it does the following:This function converts the
DataType
of the column/expression to a Scala type (because your UDF operates on scala types), and then it calls your lambda. Thedeterministic,
nullable,
anddataTypes
are functions of the wrapper of the user-defined function because it extends Expression, not your function. If you want to fully benefit from them, you would have to write a custom Expression which extendsExpression
or one of its sub-classes.Take the following as an example:
The optimized logical plan would look something like this:
As you can see it is doing the filter even though it is redundant and will always evaluate to true.
Whereas the following:
would give the following optimized logical plan:
It prunes out the filter using PruneFilter rule.
This doesn't mean all optimizations are excluded, there are optimizations which still work with UDFs such as
CombineFilter
which combines the expression from two filters for example:This optimization works because it is only dependent on the
deterministic
field and UDFs are deterministic by default. So UDFs will benefit from simple optimizations that aren't dependent on the function it wraps. This is because it is in a format which catalyst doesn't understand, catalyst operates on Trees, and your closure is a Scala function. There are other places where UDFs lose out such as specifying the java code generated and spark type information.