Comments (4)
The method FunctionUtil#evaluate(...)
performs the resolution of a function in the following order:
- PMML built-in function.
- Java UDF.
- PMML UDF as defined by some
DefineFunction
element.
You cannot override PMML built-in functions (for sanity and security reasons). But you can override DefineFunction
elements if you register a Java UDF with the same name during the startup of your application.
For example, every SAS EM generated PMML document that deals with string variables includes a SAS-EM-String-Normalize
PMML UDF. The evaluation of PMML UDFs is slow, because it will be necessary to isolate their execution into a separate scope. However, you can override this PMML UDF by registering an instance of org.jpmml.sas.functions.StringNormalize
like this:
import org.jpmml.sas.functions.StringNormalize;
FunctionRegistry.putFunction(new StringNormalize());
Please note that you will be registering a singleton instance of your Java UDF. So, it is your responsibility to make sure that its implementation of Function#evaluate(List<FieldValue>)
is thread safe.
from jpmml-evaluator.
Thanks for the fast reply. I guess this makes sense if the functions are
relatively static. Will have to check with data science tomorrow if that is
an option for us.
Would be great though to have an option like with the optimizer visitors to
prioritise DefineFunctions over reflection.
Thanks for your great work.
On 3 Mar 2016 9:02 p.m., "Villu Ruusmann" [email protected] wrote:
The method FunctionUtil#evaluate(...) performs the resolution of a
function in the following order:
- PMML built-in function.
- Java UDF.
- PMML UDF as defined by some DefineFunction element.
You cannot override override PMML built-in functions (for sanity and
security reasons). But you can override DefineFunction elements if you
register a Java UDF with the same name during the startup of your
application.For example, every SAS EM generated PMML document that deals with string
variables includes a SAS-EM-String-Normalize PMML UDF. The evaluation of
PMML UDFs is slow, becaue it will be necessary to isolate their execution
into a separate scope. However, you can override the PMML UDF by
registering an instance of org.jpmml.sas.functions.StringNormalize like
this:import org.jpmml.sas.functions.StringNormalize;
FunctionRegistry.putFunction(new StringNormalize());
Please note that you will be registering a singleton instance of your Java
UDF. So, it is your responsibility to make sure that its implementation of
Function#evaluate(List) is thread safe.—
Reply to this email directly or view it on GitHub
#17 (comment)
.
from jpmml-evaluator.
It is not a good idea to change the order of steps 2 and 3, because then you would lose the ability to override PMML UDFs with Java UDFs.
What could be done rather easily, is adding a programmatic configuration option that would prevent FunctionRegistry
from performing function look-ups using Java reflection API. I had the impression that JVM is caching the results of ClassLoader.loadClass(String)
, but your profiling results indicate that this might not be so.
Will have to run actual experiments on this.
from jpmml-evaluator.
I agree on the default order, but I guess we could load the DefineFunction
first and assuming it was replaced with a RichDefineFunction we can check
if the priority is set. If so it takes precedence over Java UDF.
On 3 Mar 2016 9:32 p.m., "Villu Ruusmann" [email protected] wrote:
It is not a good idea to change the order of steps 2 and 3, because then
you would lose the ability to override PMML UDFs with Java UDFs.What could be done rather easily, is adding a programmatic configuration
option that would prevent FunctionRegistry from performing function
look-ups using Java reflection API. I had the impression that JVM might be
caching the results of ClassLoader.loadClass(String), but your profiling
results indicate that this might not be so.Will have to run actual experiments on this.
—
Reply to this email directly or view it on GitHub
#17 (comment)
.
from jpmml-evaluator.
Related Issues (20)
- How to work with an association rules model (`AssociationModel` element)? HOT 8
- JPMML is enforcing the definition of target fields while the spec says it is optional HOT 6
- jpmml-evaluator does not handle null values when used in java? HOT 1
- Ability to run multiple JPMML-Evaluator versions in parallel (inside the same JVM) HOT 1
- NumberFormatException for evaluate "Random Survival Forest Model" generated by "SoftwareAG PMML Generator" HOT 3
- Compatibility with GraalVM HOT 12
- Not happy with XGBoost evaluation performance HOT 3
- How to load pre-transpiled PMML service provider JAR files? HOT 2
- Model verification fails for XGBoost models HOT 1
- No class def found for jakarta/xml/bind/JAXBContext HOT 3
- java.lang.IllegalArgumentException: Name cannot be empty HOT 1
- java.lang.NoClassDefFoundError: Could not initialize class org.jpmml.evaluator.FieldUtil HOT 4
- If the version 1.6.4 could work on java 8? HOT 1
- Field pmml(pred) is not defined. HOT 5
- DuplicatedFieldValueException after loading PMML in Java generated by Nyoka HOT 8
- 1.6.4 cannot run on java 8
- Exception: Required attribute `Segmentation@multipleModelMethod` is not defined HOT 3
- Updating Guava dependency to latest HOT 4
- why create jar file create error HOT 1
- LoadingModelEvaluatorBuilder not usable on Android due to "java.lang.NoClassDefFoundError: Failed resolution of: Ljava/awt/Image" HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from jpmml-evaluator.