blob: 87a0492020a984e6170f9b5358357b291fda9946 [file] [log] [blame]
<!DOCTYPE html><html><head><title>Quick Start - Classification Engine Template</title><meta charset="utf-8"/><meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta class="swiftype" name="title" data-type="string" content="Quick Start - Classification Engine Template"/><link rel="canonical" href="https://predictionio.apache.org/templates/classification/quickstart/"/><link href="/images/favicon/normal-b330020a.png" rel="shortcut icon"/><link href="/images/favicon/apple-c0febcf2.png" rel="apple-touch-icon"/><link href="//fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800" rel="stylesheet"/><link href="//maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css" rel="stylesheet"/><link href="/stylesheets/application-eccfc6cb.css" rel="stylesheet" type="text/css"/><script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.2/html5shiv.min.js"></script><script src="//cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script><script src="//use.typekit.net/pqo0itb.js"></script><script>try{Typekit.load({ async: true });}catch(e){}</script></head><body><div id="global"><header><div class="container" id="header-wrapper"><div class="row"><div class="col-sm-12"><div id="logo-wrapper"><span id="drawer-toggle"></span><a href="#"></a><a href="http://predictionio.apache.org/"><img alt="Apache PredictionIO" id="logo" src="/images/logos/logo-ee2b9bb3.png"/></a><span>®</span></div><div id="menu-wrapper"><div id="pill-wrapper"><a class="pill left" href="/gallery/template-gallery">TEMPLATES</a> <a class="pill right" href="//github.com/apache/predictionio/">OPEN SOURCE</a></div></div><img class="mobile-search-bar-toggler hidden-md hidden-lg" src="/images/icons/search-glass-704bd4ff.png"/></div></div></div></header><div id="search-bar-row-wrapper"><div class="container-fluid" id="search-bar-row"><div class="row"><div class="col-md-9 col-sm-11 col-xs-11"><div class="hidden-md hidden-lg" id="mobile-page-heading-wrapper"><p>PredictionIO Docs</p><h4>Quick Start - Classification Engine Template</h4></div><h4 class="hidden-sm hidden-xs">PredictionIO Docs</h4></div><div class="col-md-3 col-sm-1 col-xs-1 hidden-md hidden-lg"><img id="left-menu-indicator" src="/images/icons/down-arrow-dfe9f7fe.png"/></div><div class="col-md-3 col-sm-12 col-xs-12 swiftype-wrapper"><div class="swiftype"><form class="search-form"><img class="search-box-toggler hidden-xs hidden-sm" src="/images/icons/search-glass-704bd4ff.png"/><div class="search-box"><img src="/images/icons/search-glass-704bd4ff.png"/><input type="text" id="st-search-input" class="st-search-input" placeholder="Search Doc..."/></div><img class="swiftype-row-hider hidden-md hidden-lg" src="/images/icons/drawer-toggle-active-fcbef12a.png"/></form></div></div><div class="mobile-left-menu-toggler hidden-md hidden-lg"></div></div></div></div><div id="page" class="container-fluid"><div class="row"><div id="left-menu-wrapper" class="col-md-3"><nav id="nav-main"><ul><li class="level-1"><a class="expandible" href="/"><span>Apache PredictionIO® Documentation</span></a><ul><li class="level-2"><a class="final" href="/"><span>Welcome to Apache PredictionIO®</span></a></li></ul></li><li class="level-1"><a class="expandible" href="#"><span>Getting Started</span></a><ul><li class="level-2"><a class="final" href="/start/"><span>A Quick Intro</span></a></li><li class="level-2"><a class="final" href="/install/"><span>Installing Apache PredictionIO</span></a></li><li class="level-2"><a class="final" href="/start/download/"><span>Downloading an Engine Template</span></a></li><li class="level-2"><a class="final" href="/start/deploy/"><span>Deploying Your First Engine</span></a></li><li class="level-2"><a class="final" href="/start/customize/"><span>Customizing the Engine</span></a></li></ul></li><li class="level-1"><a class="expandible" href="#"><span>Integrating with Your App</span></a><ul><li class="level-2"><a class="final" href="/appintegration/"><span>App Integration Overview</span></a></li><li class="level-2"><a class="expandible" href="/sdk/"><span>List of SDKs</span></a><ul><li class="level-3"><a class="final" href="/sdk/java/"><span>Java & Android SDK</span></a></li><li class="level-3"><a class="final" href="/sdk/php/"><span>PHP SDK</span></a></li><li class="level-3"><a class="final" href="/sdk/python/"><span>Python SDK</span></a></li><li class="level-3"><a class="final" href="/sdk/ruby/"><span>Ruby SDK</span></a></li><li class="level-3"><a class="final" href="/community/projects/#sdks"><span>Community Powered SDKs</span></a></li></ul></li></ul></li><li class="level-1"><a class="expandible" href="#"><span>Deploying an Engine</span></a><ul><li class="level-2"><a class="final" href="/deploy/"><span>Deploying as a Web Service</span></a></li><li class="level-2"><a class="final" href="/batchpredict/"><span>Batch Predictions</span></a></li><li class="level-2"><a class="final" href="/deploy/monitoring/"><span>Monitoring Engine</span></a></li><li class="level-2"><a class="final" href="/deploy/engineparams/"><span>Setting Engine Parameters</span></a></li><li class="level-2"><a class="final" href="/deploy/enginevariants/"><span>Deploying Multiple Engine Variants</span></a></li><li class="level-2"><a class="final" href="/deploy/plugin/"><span>Engine Server Plugin</span></a></li></ul></li><li class="level-1"><a class="expandible" href="#"><span>Customizing an Engine</span></a><ul><li class="level-2"><a class="final" href="/customize/"><span>Learning DASE</span></a></li><li class="level-2"><a class="final" href="/customize/dase/"><span>Implement DASE</span></a></li><li class="level-2"><a class="final" href="/customize/troubleshooting/"><span>Troubleshooting Engine Development</span></a></li><li class="level-2"><a class="final" href="/api/current/#package"><span>Engine Scala APIs</span></a></li></ul></li><li class="level-1"><a class="expandible" href="#"><span>Collecting and Analyzing Data</span></a><ul><li class="level-2"><a class="final" href="/datacollection/"><span>Event Server Overview</span></a></li><li class="level-2"><a class="final" href="/datacollection/eventapi/"><span>Collecting Data with REST/SDKs</span></a></li><li class="level-2"><a class="final" href="/datacollection/eventmodel/"><span>Events Modeling</span></a></li><li class="level-2"><a class="final" href="/datacollection/webhooks/"><span>Unifying Multichannel Data with Webhooks</span></a></li><li class="level-2"><a class="final" href="/datacollection/channel/"><span>Channel</span></a></li><li class="level-2"><a class="final" href="/datacollection/batchimport/"><span>Importing Data in Batch</span></a></li><li class="level-2"><a class="final" href="/datacollection/analytics/"><span>Using Analytics Tools</span></a></li><li class="level-2"><a class="final" href="/datacollection/plugin/"><span>Event Server Plugin</span></a></li></ul></li><li class="level-1"><a class="expandible" href="#"><span>Choosing an Algorithm</span></a><ul><li class="level-2"><a class="final" href="/algorithm/"><span>Built-in Algorithm Libraries</span></a></li><li class="level-2"><a class="final" href="/algorithm/switch/"><span>Switching to Another Algorithm</span></a></li><li class="level-2"><a class="final" href="/algorithm/multiple/"><span>Combining Multiple Algorithms</span></a></li><li class="level-2"><a class="final" href="/algorithm/custom/"><span>Adding Your Own Algorithms</span></a></li></ul></li><li class="level-1"><a class="expandible" href="#"><span>Tuning and Evaluation</span></a><ul><li class="level-2"><a class="final" href="/evaluation/"><span>Overview</span></a></li><li class="level-2"><a class="final" href="/evaluation/paramtuning/"><span>Hyperparameter Tuning</span></a></li><li class="level-2"><a class="final" href="/evaluation/evaluationdashboard/"><span>Evaluation Dashboard</span></a></li><li class="level-2"><a class="final" href="/evaluation/metricchoose/"><span>Choosing Evaluation Metrics</span></a></li><li class="level-2"><a class="final" href="/evaluation/metricbuild/"><span>Building Evaluation Metrics</span></a></li></ul></li><li class="level-1"><a class="expandible" href="#"><span>System Architecture</span></a><ul><li class="level-2"><a class="final" href="/system/"><span>Architecture Overview</span></a></li><li class="level-2"><a class="final" href="/system/anotherdatastore/"><span>Using Another Data Store</span></a></li></ul></li><li class="level-1"><a class="expandible" href="#"><span>PredictionIO® Official Templates</span></a><ul><li class="level-2"><a class="final" href="/templates/"><span>Intro</span></a></li><li class="level-2"><a class="expandible" href="#"><span>Recommendation</span></a><ul><li class="level-3"><a class="final" href="/templates/recommendation/quickstart/"><span>Quick Start</span></a></li><li class="level-3"><a class="final" href="/templates/recommendation/dase/"><span>DASE</span></a></li><li class="level-3"><a class="final" href="/templates/recommendation/evaluation/"><span>Evaluation Explained</span></a></li><li class="level-3"><a class="final" href="/templates/recommendation/how-to/"><span>How-To</span></a></li><li class="level-3"><a class="final" href="/templates/recommendation/reading-custom-events/"><span>Read Custom Events</span></a></li><li class="level-3"><a class="final" href="/templates/recommendation/customize-data-prep/"><span>Customize Data Preparator</span></a></li><li class="level-3"><a class="final" href="/templates/recommendation/customize-serving/"><span>Customize Serving</span></a></li><li class="level-3"><a class="final" href="/templates/recommendation/training-with-implicit-preference/"><span>Train with Implicit Preference</span></a></li><li class="level-3"><a class="final" href="/templates/recommendation/blacklist-items/"><span>Filter Recommended Items by Blacklist in Query</span></a></li><li class="level-3"><a class="final" href="/templates/recommendation/batch-evaluator/"><span>Batch Persistable Evaluator</span></a></li></ul></li><li class="level-2"><a class="expandible" href="#"><span>E-Commerce Recommendation</span></a><ul><li class="level-3"><a class="final" href="/templates/ecommercerecommendation/quickstart/"><span>Quick Start</span></a></li><li class="level-3"><a class="final" href="/templates/ecommercerecommendation/dase/"><span>DASE</span></a></li><li class="level-3"><a class="final" href="/templates/ecommercerecommendation/how-to/"><span>How-To</span></a></li><li class="level-3"><a class="final" href="/templates/ecommercerecommendation/train-with-rate-event/"><span>Train with Rate Event</span></a></li><li class="level-3"><a class="final" href="/templates/ecommercerecommendation/adjust-score/"><span>Adjust Score</span></a></li></ul></li><li class="level-2"><a class="expandible" href="#"><span>Similar Product</span></a><ul><li class="level-3"><a class="final" href="/templates/similarproduct/quickstart/"><span>Quick Start</span></a></li><li class="level-3"><a class="final" href="/templates/similarproduct/dase/"><span>DASE</span></a></li><li class="level-3"><a class="final" href="/templates/similarproduct/how-to/"><span>How-To</span></a></li><li class="level-3"><a class="final" href="/templates/similarproduct/multi-events-multi-algos/"><span>Multiple Events and Multiple Algorithms</span></a></li><li class="level-3"><a class="final" href="/templates/similarproduct/return-item-properties/"><span>Returns Item Properties</span></a></li><li class="level-3"><a class="final" href="/templates/similarproduct/train-with-rate-event/"><span>Train with Rate Event</span></a></li><li class="level-3"><a class="final" href="/templates/similarproduct/rid-user-set-event/"><span>Get Rid of Events for Users</span></a></li><li class="level-3"><a class="final" href="/templates/similarproduct/recommended-user/"><span>Recommend Users</span></a></li></ul></li><li class="level-2"><a class="expandible" href="#"><span>Classification</span></a><ul><li class="level-3"><a class="final active" href="/templates/classification/quickstart/"><span>Quick Start</span></a></li><li class="level-3"><a class="final" href="/templates/classification/dase/"><span>DASE</span></a></li><li class="level-3"><a class="final" href="/templates/classification/how-to/"><span>How-To</span></a></li><li class="level-3"><a class="final" href="/templates/classification/add-algorithm/"><span>Use Alternative Algorithm</span></a></li><li class="level-3"><a class="final" href="/templates/classification/reading-custom-properties/"><span>Read Custom Properties</span></a></li></ul></li></ul></li><li class="level-1"><a class="expandible" href="#"><span>Engine Template Gallery</span></a><ul><li class="level-2"><a class="final" href="/gallery/template-gallery/"><span>Browse</span></a></li><li class="level-2"><a class="final" href="/community/submit-template/"><span>Submit your Engine as a Template</span></a></li></ul></li><li class="level-1"><a class="expandible" href="#"><span>Demo Tutorials</span></a><ul><li class="level-2"><a class="final" href="/community/projects/#demos"><span>Community Contributed Demo</span></a></li><li class="level-2"><a class="final" href="/demo/textclassification/"><span>Text Classification Engine Tutorial</span></a></li></ul></li><li class="level-1"><a class="expandible" href="/community/"><span>Getting Involved</span></a><ul><li class="level-2"><a class="final" href="/community/contribute-code/"><span>Contribute Code</span></a></li><li class="level-2"><a class="final" href="/community/contribute-documentation/"><span>Contribute Documentation</span></a></li><li class="level-2"><a class="final" href="/community/contribute-sdk/"><span>Contribute a SDK</span></a></li><li class="level-2"><a class="final" href="/community/contribute-webhook/"><span>Contribute a Webhook</span></a></li><li class="level-2"><a class="final" href="/community/projects/"><span>Community Projects</span></a></li></ul></li><li class="level-1"><a class="expandible" href="#"><span>Getting Help</span></a><ul><li class="level-2"><a class="final" href="/resources/faq/"><span>FAQs</span></a></li><li class="level-2"><a class="final" href="/support/"><span>Support</span></a></li></ul></li><li class="level-1"><a class="expandible" href="#"><span>Resources</span></a><ul><li class="level-2"><a class="final" href="/cli/"><span>Command-line Interface</span></a></li><li class="level-2"><a class="final" href="/resources/release/"><span>Release Cadence</span></a></li><li class="level-2"><a class="final" href="/resources/intellij/"><span>Developing Engines with IntelliJ IDEA</span></a></li><li class="level-2"><a class="final" href="/resources/upgrade/"><span>Upgrade Instructions</span></a></li><li class="level-2"><a class="final" href="/resources/glossary/"><span>Glossary</span></a></li></ul></li><li class="level-1"><a class="expandible" href="#"><span>Apache Software Foundation</span></a><ul><li class="level-2"><a class="final" href="https://www.apache.org/"><span>Apache Homepage</span></a></li><li class="level-2"><a class="final" href="https://www.apache.org/licenses/"><span>License</span></a></li><li class="level-2"><a class="final" href="https://www.apache.org/foundation/sponsorship.html"><span>Sponsorship</span></a></li><li class="level-2"><a class="final" href="https://www.apache.org/foundation/thanks.html"><span>Thanks</span></a></li><li class="level-2"><a class="final" href="https://www.apache.org/security/"><span>Security</span></a></li></ul></li></ul></nav></div><div class="col-md-9 col-sm-12"><div class="content-header hidden-md hidden-lg"><div id="breadcrumbs" class="hidden-sm hidden xs"><ul><li><a href="#">PredictionIO® Official Templates</a><span class="spacer">&gt;</span></li><li><a href="#">Classification</a><span class="spacer">&gt;</span></li><li><span class="last">Quick Start</span></li></ul></div><div id="page-title"><h1>Quick Start - Classification Engine Template</h1></div></div><div id="table-of-content-wrapper"><h5>On this page</h5><aside id="table-of-contents"><ul> <li> <a href="#overview">Overview</a> </li> <li> <a href="#usage">Usage</a> </li> <li> <a href="#1-install-and-run-predictionio">1. Install and Run PredictionIO</a> </li> <li> <a href="#2-create-a-new-engine-from-an-engine-template">2. Create a new Engine from an Engine Template</a> </li> <li> <a href="#3-generate-an-app-id-and-access-key">3. Generate an App ID and Access Key</a> </li> <li> <a href="#4-collecting-data">4. Collecting Data</a> </li> <li> <a href="#5-deploy-the-engine-as-a-service">5. Deploy the Engine as a Service</a> </li> <li> <a href="#6-use-the-engine">6. Use the Engine</a> </li> </ul> </aside><hr/><a id="edit-page-link" href="https://github.com/apache/predictionio/tree/livedoc/docs/manual/source/templates/classification/quickstart.html.md.erb"><img src="/images/icons/edit-pencil-d6c1bb3d.png"/>Edit this page</a></div><div class="content-header hidden-sm hidden-xs"><div id="breadcrumbs" class="hidden-sm hidden xs"><ul><li><a href="#">PredictionIO® Official Templates</a><span class="spacer">&gt;</span></li><li><a href="#">Classification</a><span class="spacer">&gt;</span></li><li><span class="last">Quick Start</span></li></ul></div><div id="page-title"><h1>Quick Start - Classification Engine Template</h1></div></div><div class="content"> <h2 id='overview' class='header-anchors'>Overview</h2><p>An engine template is an almost-complete implementation of an engine. PredictionIO&#39;s Classification Engine Template has integrated <strong>Apache Spark MLlib</strong>&#39;s Naive Bayes algorithm by default.</p><p>The default use case of Classification Engine Template is to predict the service plan (<em>plan</em>) a user will subscribe to based on his 3 properties: <em>attr0</em>, <em>attr1</em> and <em>attr2</em>.</p><p>You can customize it easily to fit your specific use case and needs.</p><p>We are going to show you how to create your own classification engine for production use based on this template.</p><h2 id='usage' class='header-anchors'>Usage</h2><h3 id='event-data-requirements' class='header-anchors'>Event Data Requirements</h3><p>By default, the template requires the following events to be collected:</p> <ul> <li>user $set event, which set the attributes of the user</li> </ul> <div class="alert-message note"><p>You can customize to use other event.</p></div><h3 id='input-query' class='header-anchors'>Input Query</h3> <ul> <li>individual attributes values (for version &gt;= v0.3.1)</li> </ul> <div class="alert-message warning"><p>for version &lt; v0.3.1, it is array of features values</p></div><h3 id='output-predictedresult' class='header-anchors'>Output PredictedResult</h3> <ul> <li>the predicted label</li> </ul> <h2 id='1.-install-and-run-predictionio' class='header-anchors'>1. Install and Run PredictionIO</h2> <p>First you need to <a href="/install">install PredictionIO 0.14.0</a> (if you haven&#39;t done it).</p><p>Let&#39;s say you have installed PredictionIO at <code>/home/yourname/PredictionIO/</code>. For convenience, add PredictionIO&#39;s binary command path to your <code>PATH</code>, i.e. <code>/home/yourname/PredictionIO/bin</code>:</p><div class="highlight shell"><table style="border-spacing: 0"><tbody><tr><td class="gutter gl" style="text-align: right"><pre class="lineno">1</pre></td><td class="code"><pre><span class="gp">$ </span><span class="nv">PATH</span><span class="o">=</span><span class="nv">$PATH</span>:/home/yourname/PredictionIO/bin; <span class="nb">export </span>PATH
</pre></td></tr></tbody></table> </div> <div class="alert-message note"><p>If you launched <strong>PredictionIO AWS instance</strong>, the path is located at <code>/opt/PredictionIO/bin</code>.</p></div><p>Once you have completed the installation process, please make sure all the components (PredictionIO Event Server, Elasticsearch, and HBase) are up and running.</p><div class="alert-message note"><p>If you launched <strong>PredictionIO AWS instance</strong>, you can skip <code>pio-start-all</code>. All components should have been started automatically.</p></div><p>If you are using PostgreSQL or MySQL, run the following to start PredictionIO Event Server:</p><div class="highlight shell"><table style="border-spacing: 0"><tbody><tr><td class="gutter gl" style="text-align: right"><pre class="lineno">1</pre></td><td class="code"><pre><span class="gp">$ </span>pio eventserver &amp;
</pre></td></tr></tbody></table> </div> <p>If instead you are running HBase and Elasticsearch, run the following to start all PredictionIO Event Server, HBase, and Elasticsearch:</p><div class="highlight shell"><table style="border-spacing: 0"><tbody><tr><td class="gutter gl" style="text-align: right"><pre class="lineno">1</pre></td><td class="code"><pre><span class="gp">$ </span>pio-start-all
</pre></td></tr></tbody></table> </div> <p>You can check the status by running:</p><div class="highlight shell"><table style="border-spacing: 0"><tbody><tr><td class="gutter gl" style="text-align: right"><pre class="lineno">1</pre></td><td class="code"><pre><span class="gp">$ </span>pio status
</pre></td></tr></tbody></table> </div> <p>If everything is OK, you should see the following outputs:</p><div class="highlight shell"><table style="border-spacing: 0"><tbody><tr><td class="gutter gl" style="text-align: right"><pre class="lineno">1
2
3
4</pre></td><td class="code"><pre>...
<span class="o">(</span>sleeping 5 seconds <span class="k">for </span>all messages to show up...<span class="o">)</span>
Your system is all ready to go.
</pre></td></tr></tbody></table> </div> <div class="alert-message note"><p>To further troubleshoot, please see <a href="/resources/faq/#using-predictionio">FAQ - Using PredictionIO</a>.</p></div> <p><a href="#"></a></p> <h2 id='2.-create-a-new-engine-from-an-engine-template' class='header-anchors'>2. Create a new Engine from an Engine Template</h2> <p>Now let&#39;s create a new engine called <em>MyClassification</em> by downloading the Classification Engine Template. Go to a directory where you want to put your engine and run the following:</p><div class="highlight shell"><table style="border-spacing: 0"><tbody><tr><td class="gutter gl" style="text-align: right"><pre class="lineno">1
2</pre></td><td class="code"><pre><span class="gp">$ </span>git clone https://github.com/apache/predictionio-template-attribute-based-classifier.git MyClassification
<span class="gp">$ </span><span class="nb">cd </span>MyClassification
</pre></td></tr></tbody></table> </div> <p>A new directory <em>MyClassification</em> is created, where you can find the downloaded engine template.</p> <p><a href="#"></a></p> <h2 id='3.-generate-an-app-id-and-access-key' class='header-anchors'>3. Generate an App ID and Access Key</h2> <p>You will need to create a new App in PredictionIO to store all the data of your app. The data collected will be used for machine learning modeling.</p><p>Let&#39;s assume you want to use this engine in an application named &quot;MyApp1&quot;. Run the following to create a new app &quot;MyApp1&quot;:</p><div class="highlight shell"><table style="border-spacing: 0"><tbody><tr><td class="gutter gl" style="text-align: right"><pre class="lineno">1</pre></td><td class="code"><pre><span class="gp">$ </span>pio app new MyApp1
</pre></td></tr></tbody></table> </div> <p>You should find the following in the console output:</p><div class="highlight shell"><table style="border-spacing: 0"><tbody><tr><td class="gutter gl" style="text-align: right"><pre class="lineno">1
2
3
4
5
6</pre></td><td class="code"><pre>...
<span class="o">[</span>INFO] <span class="o">[</span>App<span class="nv">$]</span> Initialized Event Store <span class="k">for </span>this app ID: 1.
<span class="o">[</span>INFO] <span class="o">[</span>App<span class="nv">$]</span> Created new app:
<span class="o">[</span>INFO] <span class="o">[</span>App<span class="nv">$]</span> Name: MyApp1
<span class="o">[</span>INFO] <span class="o">[</span>App<span class="nv">$]</span> ID: 1
<span class="o">[</span>INFO] <span class="o">[</span>App<span class="nv">$]</span> Access Key: 3mZWDzci2D5YsqAnqNnXH9SB6Rg3dsTBs8iHkK6X2i54IQsIZI1eEeQQyMfs7b3F
</pre></td></tr></tbody></table> </div> <p>Note that <em>App ID</em><em>, **Access Key</em>* are created for this App &quot;MyApp1&quot;. You will need the <strong>Access Key</strong> when you collect data with EventServer for this App.</p><p>You can list all of the apps created its corresponding ID and Access Key by running the following command:</p><div class="highlight shell"><table style="border-spacing: 0"><tbody><tr><td class="gutter gl" style="text-align: right"><pre class="lineno">1</pre></td><td class="code"><pre><span class="gp">$ </span>pio app list
</pre></td></tr></tbody></table> </div> <p>You should see a list of apps created. For example:</p><div class="highlight shell"><table style="border-spacing: 0"><tbody><tr><td class="gutter gl" style="text-align: right"><pre class="lineno">1
2
3
4</pre></td><td class="code"><pre><span class="o">[</span>INFO] <span class="o">[</span>App<span class="nv">$]</span> Name | ID | Access Key | Allowed Event<span class="o">(</span>s<span class="o">)</span>
<span class="o">[</span>INFO] <span class="o">[</span>App<span class="nv">$]</span> MyApp1 | 1 | 3mZWDzci2D5YsqAnqNnXH9SB6Rg3dsTBs8iHkK6X2i54IQsIZI1eEeQQyMfs7b3F | <span class="o">(</span>all<span class="o">)</span>
<span class="o">[</span>INFO] <span class="o">[</span>App<span class="nv">$]</span> MyApp2 | 2 | io5lz6Eg4m3Xe4JZTBFE13GMAf1dhFl6ZteuJfrO84XpdOz9wRCrDU44EUaYuXq5 | <span class="o">(</span>all<span class="o">)</span>
<span class="o">[</span>INFO] <span class="o">[</span>App<span class="nv">$]</span> Finished listing 2 app<span class="o">(</span>s<span class="o">)</span>.
</pre></td></tr></tbody></table> </div> <p><a href="#"></a></p> <h2 id='4.-collecting-data' class='header-anchors'>4. Collecting Data</h2><p>Next, let&#39;s collect some training data. By default, the Classification Engine Template reads 4 properties of a user record: attr0, attr1, attr2 and plan. This templates requires &#39;$set&#39; user events.</p><div class="alert-message info"><p>This template can easily be customized to use different or more number of attributes.</p></div> <p>You can send these events to PredictionIO Event Server in real-time easily by making a HTTP request or through the provided SDK. Please see <a href="/appintegration/">App Integration Overview</a> for more details how to integrate your app with SDK.</p><p>Let&#39;s try sending events to EventServer with the following <code>curl</code> commands (The corresponding SDK code is showed in other tabs).</p><p>Replace <code>&lt;ACCCESS_KEY&gt;</code> by the Access Key generated in above steps. Note that <code>localhost:7070</code> is the default URL of the Event Server.</p><p>For convenience, set your access key to the shell variable, run:</p><p><code>$ ACCESS_KEY=&lt;ACCESS_KEY&gt;</code></p> <p><a href="#"></a></p> <p>To set properties &quot;attr0&quot;, &quot;attr1&quot;, &quot;attr2&quot; and &quot;plan&quot; for user &quot;u0&quot; on time <code>2014-11-02T09:39:45.618-08:00</code> (current time will be used if eventTime is not specified), you can send <code>$set</code> event for the user. To send this event, run the following <code>curl</code> command:</p><div class="tabs"> <ul class="control"> <li data-lang="json"><a href="#tab-3e24c068-0415-469b-ae98-e00fdddaddba">REST API</a></li> <li data-lang="python"><a href="#tab-3f67227a-b521-4a91-a636-4148a5306fc4">Python SDK</a></li> <li data-lang="php"><a href="#tab-3a43cc94-5ab5-4d3d-a29d-2b2dd02d1440">PHP SDK</a></li> <li data-lang="ruby"><a href="#tab-9079ce2d-7c84-4a28-86e2-65b233abcbb6">Ruby SDK</a></li> <li data-lang="java"><a href="#tab-dff2ffb6-766d-4c11-8f44-4b9c9fa678fe">Java SDK</a></li> </ul> <div data-tab="REST API" data-lang="json" id="tab-3e24c068-0415-469b-ae98-e00fdddaddba"> <div class="highlight shell"> <table style="border-spacing: 0"><tbody><tr> <td class="gutter gl" style="text-align: right"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
13
14</pre></td> <td class="code"><pre><span class="gp">$ </span>curl -i -X POST http://localhost:7070/events.json?accessKey<span class="o">=</span><span class="nv">$ACCESS_KEY</span> <span class="se">\</span>
-H <span class="s2">"Content-Type: application/json"</span> <span class="se">\</span>
-d <span class="s1">'{
"event" : "$set",
"entityType" : "user",
"entityId" : "u0",
"properties" : {
"attr0" : 0,
"attr1" : 1,
"attr2" : 0,
"plan" : 1
}
"eventTime" : "2014-11-02T09:39:45.618-08:00"
}'</span>
</pre></td> </tr></tbody></table> </div> </div> <div data-tab="Python SDK" data-lang="python" id="tab-3f67227a-b521-4a91-a636-4148a5306fc4"> <div class="highlight python"> <table style="border-spacing: 0"><tbody><tr> <td class="gutter gl" style="text-align: right"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21</pre></td> <td class="code"><pre><span class="kn">import</span> <span class="nn">predictionio</span>
<span class="n">client</span> <span class="o">=</span> <span class="n">predictionio</span><span class="o">.</span><span class="n">EventClient</span><span class="p">(</span>
<span class="n">access_key</span><span class="o">=&lt;</span><span class="n">ACCESS</span> <span class="n">KEY</span><span class="o">&gt;</span><span class="p">,</span>
<span class="n">url</span><span class="o">=&lt;</span><span class="n">URL</span> <span class="n">OF</span> <span class="n">EVENTSERVER</span><span class="o">&gt;</span><span class="p">,</span>
<span class="n">threads</span><span class="o">=</span><span class="mi">5</span><span class="p">,</span>
<span class="n">qsize</span><span class="o">=</span><span class="mi">500</span>
<span class="p">)</span>
<span class="c"># Set the 4 properties for a user</span>
<span class="n">client</span><span class="o">.</span><span class="n">create_event</span><span class="p">(</span>
<span class="n">event</span><span class="o">=</span><span class="s">"$set"</span><span class="p">,</span>
<span class="n">entity_type</span><span class="o">=</span><span class="s">"user"</span><span class="p">,</span>
<span class="n">entity_id</span><span class="o">=&lt;</span><span class="n">USER</span> <span class="n">ID</span><span class="o">&gt;</span><span class="p">,</span>
<span class="n">properties</span><span class="o">=</span> <span class="p">{</span>
<span class="s">"attr0"</span> <span class="p">:</span> <span class="nb">int</span><span class="p">(</span><span class="o">&lt;</span><span class="n">VALUE</span> <span class="n">OF</span> <span class="n">ATTR0</span><span class="o">&gt;</span><span class="p">),</span>
<span class="s">"attr1"</span> <span class="p">:</span> <span class="nb">int</span><span class="p">(</span><span class="o">&lt;</span><span class="n">VALUE</span> <span class="n">OF</span> <span class="n">ATTR1</span><span class="o">&gt;</span><span class="p">),</span>
<span class="s">"attr2"</span> <span class="p">:</span> <span class="nb">int</span><span class="p">(</span><span class="o">&lt;</span><span class="n">VALUE</span> <span class="n">OF</span> <span class="n">ATTR2</span><span class="o">&gt;</span><span class="p">),</span>
<span class="s">"plan"</span> <span class="p">:</span> <span class="nb">int</span><span class="p">(</span><span class="o">&lt;</span><span class="n">VALUE</span> <span class="n">OF</span> <span class="n">PLAN</span><span class="o">&gt;</span><span class="p">)</span>
<span class="p">}</span>
<span class="p">)</span>
</pre></td> </tr></tbody></table> </div> </div> <div data-tab="PHP SDK" data-lang="php" id="tab-3a43cc94-5ab5-4d3d-a29d-2b2dd02d1440"> <div class="highlight php"> <table style="border-spacing: 0"><tbody><tr> <td class="gutter gl" style="text-align: right"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19</pre></td> <td class="code"><pre><span class="cp">&lt;?php</span>
<span class="k">require_once</span><span class="p">(</span><span class="s2">"vendor/autoload.php"</span><span class="p">);</span>
<span class="k">use</span> <span class="nx">predictionio\EventClient</span><span class="p">;</span>
<span class="nv">$client</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">EventClient</span><span class="p">(</span><span class="o">&lt;</span><span class="nx">ACCESS</span> <span class="nx">KEY</span><span class="o">&gt;</span><span class="p">,</span> <span class="o">&lt;</span><span class="nx">URL</span> <span class="nx">OF</span> <span class="nx">EVENTSERVER</span><span class="o">&gt;</span><span class="p">);</span>
<span class="c1">// Set the 4 properties for a user
</span><span class="nv">$client</span><span class="o">-&gt;</span><span class="na">createEvent</span><span class="p">(</span><span class="k">array</span><span class="p">(</span>
<span class="s1">'event'</span> <span class="o">=&gt;</span> <span class="s1">'$set'</span><span class="p">,</span>
<span class="s1">'entityType'</span> <span class="o">=&gt;</span> <span class="s1">'user'</span><span class="p">,</span>
<span class="s1">'entityId'</span> <span class="o">=&gt;</span> <span class="o">&lt;</span><span class="nx">USER</span> <span class="nx">ID</span><span class="o">&gt;</span><span class="p">,</span>
<span class="s1">'properties'</span> <span class="o">=&gt;</span> <span class="k">array</span><span class="p">(</span>
<span class="s1">'attr0'</span> <span class="o">=&gt;</span> <span class="o">&lt;</span><span class="nx">VALUE</span> <span class="nx">OF</span> <span class="nx">ATTR0</span><span class="o">&gt;</span><span class="p">,</span>
<span class="s1">'attr1'</span> <span class="o">=&gt;</span> <span class="o">&lt;</span><span class="nx">VALUE</span> <span class="nx">OF</span> <span class="nx">ATTR1</span><span class="o">&gt;</span><span class="p">,</span>
<span class="s1">'attr2'</span> <span class="o">=&gt;</span> <span class="o">&lt;</span><span class="nx">VALUE</span> <span class="nx">OF</span> <span class="nx">ATTR2</span><span class="o">&gt;</span><span class="p">,</span>
<span class="s1">'plan'</span> <span class="o">=&gt;</span> <span class="o">&lt;</span><span class="nx">VALUE</span> <span class="nx">OF</span> <span class="nx">PLAN</span><span class="o">&gt;</span>
<span class="p">)</span>
<span class="p">));</span>
<span class="cp">?&gt;</span>
</pre></td> </tr></tbody></table> </div> </div> <div data-tab="Ruby SDK" data-lang="ruby" id="tab-9079ce2d-7c84-4a28-86e2-65b233abcbb6"> <div class="highlight ruby"> <table style="border-spacing: 0"><tbody><tr> <td class="gutter gl" style="text-align: right"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16</pre></td> <td class="code"><pre><span class="c1"># Create a client object.</span>
<span class="n">client</span> <span class="o">=</span> <span class="no">PredictionIO</span><span class="o">::</span><span class="no">EventClient</span><span class="p">.</span><span class="nf">new</span><span class="p">(</span><span class="o">&lt;</span><span class="no">ACCESS</span> <span class="no">KEY</span><span class="o">&gt;</span><span class="p">,</span> <span class="o">&lt;</span><span class="no">URL</span> <span class="no">OF</span> <span class="no">EVENTSERVER</span><span class="o">&gt;</span><span class="p">)</span>
<span class="c1"># Set the 4 properties for a user.</span>
<span class="n">client</span><span class="p">.</span><span class="nf">create_event</span><span class="p">(</span>
<span class="s1">'$set'</span><span class="p">,</span>
<span class="s1">'user'</span><span class="p">,</span>
<span class="o">&lt;</span><span class="no">USER</span> <span class="no">ID</span><span class="o">&gt;</span><span class="p">,</span> <span class="p">{</span>
<span class="s1">'properties'</span> <span class="o">=&gt;</span> <span class="p">{</span>
<span class="s1">'attr0'</span> <span class="o">=&gt;</span> <span class="o">&lt;</span><span class="no">VALUE</span> <span class="no">OF</span> <span class="no">ATTR0</span> <span class="p">(</span><span class="n">integer</span><span class="p">)</span><span class="o">&gt;</span><span class="p">,</span>
<span class="s1">'attr1'</span> <span class="o">=&gt;</span> <span class="o">&lt;</span><span class="no">VALUE</span> <span class="no">OF</span> <span class="no">ATTR1</span> <span class="p">(</span><span class="n">integer</span><span class="p">)</span><span class="o">&gt;</span><span class="p">,</span>
<span class="s1">'attr2'</span> <span class="o">=&gt;</span> <span class="o">&lt;</span><span class="no">VALUE</span> <span class="no">OF</span> <span class="no">ATTR2</span> <span class="p">(</span><span class="n">integer</span><span class="p">)</span><span class="o">&gt;</span><span class="p">,</span>
<span class="s1">'plan'</span> <span class="o">=&gt;</span> <span class="o">&lt;</span><span class="no">VALUE</span> <span class="no">OF</span> <span class="no">PLAN</span> <span class="p">(</span><span class="n">integer</span><span class="p">)</span><span class="o">&gt;</span><span class="p">,</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="p">)</span>
</pre></td> </tr></tbody></table> </div> </div> <div data-tab="Java SDK" data-lang="java" id="tab-dff2ffb6-766d-4c11-8f44-4b9c9fa678fe"> <div class="highlight java"> <table style="border-spacing: 0"><tbody><tr> <td class="gutter gl" style="text-align: right"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18</pre></td> <td class="code"><pre><span class="kn">import</span> <span class="nn">com.google.common.collect.ImmutableMap</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">org.apache.predictionio.Event</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">org.apache.predictionio.EventClient</span><span class="o">;</span>
<span class="n">EventClient</span> <span class="n">client</span> <span class="o">=</span> <span class="k">new</span> <span class="n">EventClient</span><span class="o">(&lt;</span><span class="n">ACCESS</span> <span class="n">KEY</span><span class="o">&gt;,</span> <span class="o">&lt;</span><span class="n">URL</span> <span class="n">OF</span> <span class="n">EVENTSERVER</span><span class="o">&gt;);</span>
<span class="c1">// set the 4 properties for a user</span>
<span class="n">Event</span> <span class="n">event</span> <span class="o">=</span> <span class="k">new</span> <span class="n">Event</span><span class="o">()</span>
<span class="o">.</span><span class="na">event</span><span class="o">(</span><span class="s">"$set"</span><span class="o">)</span>
<span class="o">.</span><span class="na">entityType</span><span class="o">(</span><span class="s">"user"</span><span class="o">)</span>
<span class="o">.</span><span class="na">entityId</span><span class="o">(&lt;</span><span class="n">USER</span> <span class="n">ID</span><span class="o">&gt;)</span>
<span class="o">.</span><span class="na">properties</span><span class="o">(</span><span class="n">ImmutableMap</span><span class="o">.&lt;</span><span class="n">String</span><span class="o">,</span> <span class="n">Object</span><span class="o">&gt;</span><span class="n">of</span><span class="o">(</span>
<span class="s">"attr0"</span><span class="o">,</span> <span class="o">&lt;</span><span class="n">VALUE</span> <span class="n">OF</span> <span class="n">ATTR0</span><span class="o">&gt;,</span>
<span class="s">"attr1"</span><span class="o">,</span> <span class="o">&lt;</span><span class="n">VALUE</span> <span class="n">OF</span> <span class="n">ATTR1</span><span class="o">&gt;,</span>
<span class="s">"attr2"</span><span class="o">,</span> <span class="o">&lt;</span><span class="n">VALUE</span> <span class="n">OF</span> <span class="n">ATTR2</span><span class="o">&gt;,</span>
<span class="s">"plan"</span><span class="o">,</span> <span class="o">&lt;</span><span class="n">VALUE</span> <span class="n">OF</span> <span class="n">PLAN</span><span class="o">&gt;</span>
<span class="o">));</span>
<span class="n">client</span><span class="o">.</span><span class="na">createEvent</span><span class="o">(</span><span class="n">event</span><span class="o">);</span>
</pre></td> </tr></tbody></table> </div> </div> </div> <p>Note that you can also set the properties for the user with multiple <code>$set</code> events (They will be aggregated during engine training).</p><p>To set properties &quot;attr0&quot;, &quot;attr1&quot; and &quot;attr2&quot;, and &quot;plan&quot; for user &quot;u1&quot; at different time, you can send following <code>$set</code> events for the user. To send these events, run the following <code>curl</code> command:</p><div class="tabs"> <ul class="control"> <li data-lang="json"><a href="#tab-f1f7d9b9-152a-4aee-bc79-d9e78a65b492">REST API</a></li> <li data-lang="python"><a href="#tab-90bdcbe8-e057-4d8e-81cf-122b1a2e4cea">Python SDK</a></li> <li data-lang="php"><a href="#tab-f0407fbe-a048-40b5-9cf4-a5aaa1ee06e3">PHP SDK</a></li> <li data-lang="ruby"><a href="#tab-f41b82fd-117c-4460-a7a4-eaeb7551d54a">Ruby SDK</a></li> <li data-lang="java"><a href="#tab-27a5a7b4-2c85-4b9f-9bbb-9ee7a582b3eb">Java SDK</a></li> </ul> <div data-tab="REST API" data-lang="json" id="tab-f1f7d9b9-152a-4aee-bc79-d9e78a65b492"> <div class="highlight shell"> <table style="border-spacing: 0"><tbody><tr> <td class="gutter gl" style="text-align: right"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36</pre></td> <td class="code"><pre><span class="gp">$ </span>curl -i -X POST http://localhost:7070/events.json?accessKey<span class="o">=</span><span class="nv">$ACCESS_KEY</span> <span class="se">\</span>
-H <span class="s2">"Content-Type: application/json"</span> <span class="se">\</span>
-d <span class="s1">'{
"event" : "$set",
"entityType" : "user",
"entityId" : "u1",
"properties" : {
"attr0" : 0
}
"eventTime" : "2014-11-02T09:39:45.618-08:00"
}'</span>
<span class="gp">$ </span>curl -i -X POST http://localhost:7070/events.json?accessKey<span class="o">=</span><span class="nv">$ACCESS_KEY</span> <span class="se">\</span>
-H <span class="s2">"Content-Type: application/json"</span> <span class="se">\</span>
-d <span class="s1">'{
"event" : "$set",
"entityType" : "user",
"entityId" : "u1",
"properties" : {
"attr1" : 1,
"attr2": 0
}
"eventTime" : "2014-11-02T09:39:45.618-08:00"
}'</span>
<span class="gp">$ </span>curl -i -X POST http://localhost:7070/events.json?accessKey<span class="o">=</span><span class="nv">$ACCESS_KEY</span> <span class="se">\</span>
-H <span class="s2">"Content-Type: application/json"</span> <span class="se">\</span>
-d <span class="s1">'{
"event" : "$set",
"entityType" : "user",
"entityId" : "u1",
"properties" : {
"plan" : 1
}
"eventTime" : "2014-11-02T09:39:45.618-08:00"
}'</span>
</pre></td> </tr></tbody></table> </div> </div> <div data-tab="Python SDK" data-lang="python" id="tab-90bdcbe8-e057-4d8e-81cf-122b1a2e4cea"> <div class="highlight python"> <table style="border-spacing: 0"><tbody><tr> <td class="gutter gl" style="text-align: right"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27</pre></td> <td class="code"><pre><span class="c"># You may also set the properties one by one</span>
<span class="n">client</span><span class="o">.</span><span class="n">create_event</span><span class="p">(</span>
<span class="n">event</span><span class="o">=</span><span class="s">"$set"</span><span class="p">,</span>
<span class="n">entity_type</span><span class="o">=</span><span class="s">"user"</span><span class="p">,</span>
<span class="n">entity_id</span><span class="o">=&lt;</span><span class="n">USER</span> <span class="n">ID</span><span class="o">&gt;</span><span class="p">,</span>
<span class="n">properties</span><span class="o">=</span> <span class="p">{</span>
<span class="s">"attr0"</span> <span class="p">:</span> <span class="nb">int</span><span class="p">(</span><span class="o">&lt;</span><span class="n">VALUE</span> <span class="n">OF</span> <span class="n">ATTR0</span><span class="o">&gt;</span><span class="p">)</span>
<span class="p">}</span>
<span class="p">)</span>
<span class="n">client</span><span class="o">.</span><span class="n">create_event</span><span class="p">(</span>
<span class="n">event</span><span class="o">=</span><span class="s">"$set"</span><span class="p">,</span>
<span class="n">entity_type</span><span class="o">=</span><span class="s">"user"</span><span class="p">,</span>
<span class="n">entity_id</span><span class="o">=&lt;</span><span class="n">USER</span> <span class="n">ID</span><span class="o">&gt;</span><span class="p">,</span>
<span class="n">properties</span><span class="o">=</span> <span class="p">{</span>
<span class="s">"attr1"</span> <span class="p">:</span> <span class="nb">int</span><span class="p">(</span><span class="o">&lt;</span><span class="n">VALUE</span> <span class="n">OF</span> <span class="n">ATTR1</span><span class="o">&gt;</span><span class="p">),</span>
<span class="s">"attr2"</span> <span class="p">:</span> <span class="nb">int</span><span class="p">(</span><span class="o">&lt;</span><span class="n">VALUE</span> <span class="n">OF</span> <span class="n">ATTR2</span><span class="o">&gt;</span><span class="p">)</span>
<span class="p">}</span>
<span class="p">)</span>
<span class="n">client</span><span class="o">.</span><span class="n">create_event</span><span class="p">(</span>
<span class="n">event</span><span class="o">=</span><span class="s">"$set"</span><span class="p">,</span>
<span class="n">entity_type</span><span class="o">=</span><span class="s">"user"</span><span class="p">,</span>
<span class="n">entity_id</span><span class="o">=&lt;</span><span class="n">USER</span> <span class="n">ID</span><span class="o">&gt;</span><span class="p">,</span>
<span class="n">properties</span><span class="o">=</span> <span class="p">{</span>
<span class="s">"plan"</span> <span class="p">:</span> <span class="nb">int</span><span class="p">(</span><span class="o">&lt;</span><span class="n">VALUE</span> <span class="n">OF</span> <span class="n">PLAN</span><span class="o">&gt;</span><span class="p">)</span>
<span class="p">}</span>
<span class="p">)</span>
</pre></td> </tr></tbody></table> </div> </div> <div data-tab="PHP SDK" data-lang="php" id="tab-f0407fbe-a048-40b5-9cf4-a5aaa1ee06e3"> <div class="highlight php"> <table style="border-spacing: 0"><tbody><tr> <td class="gutter gl" style="text-align: right"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32</pre></td> <td class="code"><pre><span class="cp">&lt;?php</span>
<span class="c1">// You may also set the properties one by one
</span><span class="nv">$client</span><span class="o">-&gt;</span><span class="na">createEvent</span><span class="p">(</span><span class="k">array</span><span class="p">(</span>
<span class="s1">'event'</span> <span class="o">=&gt;</span> <span class="s1">'$set'</span><span class="p">,</span>
<span class="s1">'entityType'</span> <span class="o">=&gt;</span> <span class="s1">'user'</span><span class="p">,</span>
<span class="s1">'entityId'</span> <span class="o">=&gt;</span> <span class="o">&lt;</span><span class="nx">USER</span> <span class="nx">ID</span><span class="o">&gt;</span><span class="p">,</span>
<span class="s1">'properties'</span> <span class="o">=&gt;</span> <span class="k">array</span><span class="p">(</span>
<span class="s1">'attr0'</span> <span class="o">=&gt;</span> <span class="o">&lt;</span><span class="nx">VALUE</span> <span class="nx">OF</span> <span class="nx">ATTR0</span><span class="o">&gt;</span>
<span class="p">)</span>
<span class="p">));</span>
<span class="nv">$client</span><span class="o">-&gt;</span><span class="na">createEvent</span><span class="p">(</span><span class="k">array</span><span class="p">(</span>
<span class="s1">'event'</span> <span class="o">=&gt;</span> <span class="s1">'$set'</span><span class="p">,</span>
<span class="s1">'entityType'</span> <span class="o">=&gt;</span> <span class="s1">'user'</span><span class="p">,</span>
<span class="s1">'entityId'</span> <span class="o">=&gt;</span> <span class="o">&lt;</span><span class="nx">USER</span> <span class="nx">ID</span><span class="o">&gt;</span><span class="p">,</span>
<span class="s1">'properties'</span> <span class="o">=&gt;</span> <span class="k">array</span><span class="p">(</span>
<span class="s1">'attr1'</span> <span class="o">=&gt;</span> <span class="o">&lt;</span><span class="nx">VALUE</span> <span class="nx">OF</span> <span class="nx">ATTR1</span><span class="o">&gt;</span><span class="p">,</span>
<span class="s1">'attr2'</span> <span class="o">=&gt;</span> <span class="o">&lt;</span><span class="nx">VALUE</span> <span class="nx">OF</span> <span class="nx">ATTR2</span><span class="o">&gt;</span>
<span class="p">)</span>
<span class="p">));</span>
<span class="nv">$client</span><span class="o">-&gt;</span><span class="na">createEvent</span><span class="p">(</span><span class="k">array</span><span class="p">(</span>
<span class="s1">'event'</span> <span class="o">=&gt;</span> <span class="s1">'$set'</span><span class="p">,</span>
<span class="s1">'entityType'</span> <span class="o">=&gt;</span> <span class="s1">'user'</span><span class="p">,</span>
<span class="s1">'entityId'</span> <span class="o">=&gt;</span> <span class="o">&lt;</span><span class="nx">USER</span> <span class="nx">ID</span><span class="o">&gt;</span><span class="p">,</span>
<span class="s1">'properties'</span> <span class="o">=&gt;</span> <span class="k">array</span><span class="p">(</span>
<span class="s1">'plan'</span> <span class="o">=&gt;</span> <span class="o">&lt;</span><span class="nx">VALUE</span> <span class="nx">OF</span> <span class="nx">PLAN</span><span class="o">&gt;</span>
<span class="p">)</span>
<span class="p">));</span>
<span class="cp">?&gt;</span>
</pre></td> </tr></tbody></table> </div> </div> <div data-tab="Ruby SDK" data-lang="ruby" id="tab-f41b82fd-117c-4460-a7a4-eaeb7551d54a"> <div class="highlight ruby"> <table style="border-spacing: 0"><tbody><tr> <td class="gutter gl" style="text-align: right"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22</pre></td> <td class="code"><pre><span class="c1"># You may also set the properties one by one.</span>
<span class="n">client</span><span class="p">.</span><span class="nf">create_event</span><span class="p">(</span>
<span class="s1">'$set'</span><span class="p">,</span>
<span class="s1">'user'</span><span class="p">,</span>
<span class="o">&lt;</span><span class="no">USER</span> <span class="no">ID</span><span class="o">&gt;</span><span class="p">,</span> <span class="p">{</span>
<span class="s1">'properties'</span> <span class="o">=&gt;</span> <span class="p">{</span>
<span class="s1">'attr0'</span> <span class="o">=&gt;</span> <span class="o">&lt;</span><span class="no">VALUE</span> <span class="no">OF</span> <span class="no">ATTR0</span> <span class="p">(</span><span class="n">integer</span><span class="p">)</span><span class="o">&gt;</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="p">)</span>
<span class="n">client</span><span class="p">.</span><span class="nf">create_event</span><span class="p">(</span>
<span class="s1">'$set'</span><span class="p">,</span>
<span class="s1">'user'</span><span class="p">,</span>
<span class="o">&lt;</span><span class="no">USER</span> <span class="no">ID</span><span class="o">&gt;</span><span class="p">,</span> <span class="p">{</span>
<span class="s1">'properties'</span> <span class="o">=&gt;</span> <span class="p">{</span>
<span class="s1">'attr1'</span> <span class="o">=&gt;</span> <span class="o">&lt;</span><span class="no">VALUE</span> <span class="no">OF</span> <span class="no">ATTR1</span> <span class="p">(</span><span class="n">integer</span><span class="p">)</span><span class="o">&gt;</span><span class="p">,</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="p">)</span>
<span class="c1"># Etc...</span>
</pre></td> </tr></tbody></table> </div> </div> <div data-tab="Java SDK" data-lang="java" id="tab-27a5a7b4-2c85-4b9f-9bbb-9ee7a582b3eb"> <div class="highlight java"> <table style="border-spacing: 0"><tbody><tr> <td class="gutter gl" style="text-align: right"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17</pre></td> <td class="code"><pre><span class="c1">// you may also set the properties one by one</span>
<span class="n">client</span><span class="o">.</span><span class="na">createEvent</span><span class="o">(</span><span class="k">new</span> <span class="n">Event</span><span class="o">()</span>
<span class="o">.</span><span class="na">event</span><span class="o">(</span><span class="s">"$set"</span><span class="o">)</span>
<span class="o">.</span><span class="na">entityType</span><span class="o">(</span><span class="s">"user"</span><span class="o">)</span>
<span class="o">.</span><span class="na">entityId</span><span class="o">(&lt;</span><span class="n">USER</span> <span class="n">ID</span><span class="o">&gt;)</span>
<span class="o">.</span><span class="na">property</span><span class="o">(</span><span class="s">"attr0"</span><span class="o">,</span> <span class="o">&lt;</span><span class="n">VALUE</span> <span class="n">OF</span> <span class="n">ATTR0</span><span class="o">&gt;));</span>
<span class="n">client</span><span class="o">.</span><span class="na">createEvent</span><span class="o">(</span><span class="k">new</span> <span class="n">Event</span><span class="o">()</span>
<span class="o">.</span><span class="na">event</span><span class="o">(</span><span class="s">"$set"</span><span class="o">)</span>
<span class="o">.</span><span class="na">entityType</span><span class="o">(</span><span class="s">"user"</span><span class="o">)</span>
<span class="o">.</span><span class="na">entityId</span><span class="o">(&lt;</span><span class="n">USER</span> <span class="n">ID</span><span class="o">&gt;)</span>
<span class="o">.</span><span class="na">property</span><span class="o">(</span><span class="s">"attr1"</span><span class="o">,</span> <span class="o">&lt;</span><span class="n">VALUE</span> <span class="n">OF</span> <span class="n">ATTR1</span><span class="o">&gt;)</span>
<span class="o">.</span><span class="na">property</span><span class="o">(</span><span class="s">"attr2"</span><span class="o">,</span> <span class="o">&lt;</span><span class="n">VALUE</span> <span class="n">OF</span> <span class="n">ATTR2</span><span class="o">&gt;));</span>
<span class="n">client</span><span class="o">.</span><span class="na">createEvent</span><span class="o">(</span><span class="k">new</span> <span class="n">Event</span><span class="o">()</span>
<span class="o">.</span><span class="na">event</span><span class="o">(</span><span class="s">"$set"</span><span class="o">)</span>
<span class="o">.</span><span class="na">entityType</span><span class="o">(</span><span class="s">"user"</span><span class="o">)</span>
<span class="o">.</span><span class="na">entityId</span><span class="o">(&lt;</span><span class="n">USER</span> <span class="n">ID</span><span class="o">&gt;)</span>
<span class="o">.</span><span class="na">property</span><span class="o">(</span><span class="s">"plan"</span><span class="o">,</span> <span class="o">&lt;</span><span class="n">VALUE</span> <span class="n">OF</span> <span class="n">PLAN</span><span class="o">&gt;));</span>
</pre></td> </tr></tbody></table> </div> </div> </div> <p>The properties of the <code>user</code> can be set, unset, or delete by special events <strong>$set</strong>, <strong>$unset</strong> and <strong>$delete</strong>. Please refer to <a href="/datacollection/eventapi/#note-about-properties">Event API</a> for more details of using these events.</p> <p><h3 id='query-event-server' class='header-anchors'>Query Event Server</h3><p>Now let&#39;s query the EventServer and see if these events are imported successfully.</p><p>Go to following URL with your browser:</p><p><code><a href="http://localhost:7070/events.json?accessKey=&amp;lt;YOUR_ACCESS_KEY">http://localhost:7070/events.json?accessKey=&amp;lt;YOUR_ACCESS_KEY</a>&gt;</code></p><p>or run the following command in terminal:</p><div class="highlight shell"><table style="border-spacing: 0"><tbody><tr><td class="gutter gl" style="text-align: right"><pre class="lineno">1</pre></td><td class="code"><pre><span class="gp">$ </span>curl -i -X GET <span class="s2">&quot;<a href="http://localhost:7070/events.json?accessKey=">http://localhost:7070/events.json?accessKey=</a></span><span class="nv">$ACCESS_KEY</span><span class="s2">&quot;</span>
</pre></td></tr></tbody></table> </div> <div class="alert-message note"><p>Note that you should quote the entire URL by using single or double quotes when you run the <code>curl</code> command.</p></div><p>It should return the imported events in JSON format. You can refer to <a href="/datacollection/eventapi/#debugging-recipes">Event Server Debugging Recipes</a> for more different ways to query Event Server.</p></p><h3 id='import-more-sample-data' class='header-anchors'>Import More Sample Data</h3> <p>This engine requires more data in order to train a useful model. Instead of sending more events one by one in real time, for quickstart demonstration purpose, we are going to use a script to import more events in batch.</p> <p>A Python import script <code>import_eventserver.py</code> is provided to import the data to Event Server using Python SDK. Please upgrade to the latest Python SDK.</p> <p>First, you will need to install Python SDK in order to run the sample data import script. To install Python SDK, run:</p><div class="highlight shell"><table style="border-spacing: 0"><tbody><tr><td class="gutter gl" style="text-align: right"><pre class="lineno">1</pre></td><td class="code"><pre><span class="gp">$ </span>pip install predictionio
</pre></td></tr></tbody></table> </div> <p>or</p><div class="highlight shell"><table style="border-spacing: 0"><tbody><tr><td class="gutter gl" style="text-align: right"><pre class="lineno">1</pre></td><td class="code"><pre><span class="gp">$ </span>easy_install predictionio
</pre></td></tr></tbody></table> </div> <div class="alert-message note"><p>You may need <code>sudo</code> access if you have permission issue. (ie. <code>sudo pip install predictionio</code>)</p></div> <p><a href="#"></a></p> <p>Make sure you are under the <code>MyClassification</code> directory. Execute the following to import the data:</p><div class="highlight shell"><table style="border-spacing: 0"><tbody><tr><td class="gutter gl" style="text-align: right"><pre class="lineno">1
2</pre></td><td class="code"><pre><span class="gp">$ </span><span class="nb">cd </span>MyClassification
<span class="gp">$ </span>python data/import_eventserver.py --access_key <span class="nv">$ACCESS_KEY</span>
</pre></td></tr></tbody></table> </div> <p>You should see the following output:</p><div class="highlight shell"><table style="border-spacing: 0"><tbody><tr><td class="gutter gl" style="text-align: right"><pre class="lineno">1
2</pre></td><td class="code"><pre>Importing data...
6 events are imported.
</pre></td></tr></tbody></table> </div> <p>Now the training data is stored as events inside the Event Store.</p> <p><a href="#"></a></p><div class="alert-message warning"><p>If you see error <strong>TypeError: <strong>init</strong>() got an unexpected keyword argument &#39;access_key&#39;</strong>, please update the Python SDK to the latest version.</p></div><p>You can query the event server again as described previously to check the imported events.</p> <h2 id='5.-deploy-the-engine-as-a-service' class='header-anchors'>5. Deploy the Engine as a Service</h2> <p>Now you can build, train, and deploy the engine. First, make sure you are under the <code>MyClassification</code> directory.</p><div class="highlight shell"><table style="border-spacing: 0"><tbody><tr><td class="gutter gl" style="text-align: right"><pre class="lineno">1</pre></td><td class="code"><pre><span class="gp">$ </span><span class="nb">cd </span>MyClassification
</pre></td></tr></tbody></table> </div> <h3 id='engine.json' class='header-anchors'>Engine.json</h3><p>Under the directory, you should find an <code>engine.json</code> file; this is where you specify parameters for the engine.</p><div class="alert-message warning"><p>Modify this file to make sure the <code>appName</code> parameter match your <strong>App Name</strong> you created earlier (e.g. &quot;MyApp1&quot; if you follow the quickstart).</p></div><div class="highlight shell"><table style="border-spacing: 0"><tbody><tr><td class="gutter gl" style="text-align: right"><pre class="lineno">1
2
3
4
5
6
7</pre></td><td class="code"><pre> ...
<span class="s2">"datasource"</span>: <span class="o">{</span>
<span class="s2">"params"</span> : <span class="o">{</span>
<span class="s2">"appName"</span>: <span class="s2">"MyApp1"</span>
<span class="o">}</span>
<span class="o">}</span>,
...
</pre></td></tr></tbody></table> </div> <div class="alert-message note"><p>You may see <code>appId</code> in engine.json instead, which means you are using old template. In this case, make sure the <code>appId</code> defined in the file match your <strong>App ID</strong>. Alternatively, you can download the latest version of the template or follow our <a href="/resources/upgrade/#upgrade-to-0.9.2">upgrade instructions</a> to modify the template to use <code>appName</code> as parameter.</p></div> <p><a href="#"></a></p> <p><h3 id='building' class='header-anchors'>Building</h3><p>Start with building your <em>MyClassification</em> engine. Run the following command:</p><div class="highlight shell"><table style="border-spacing: 0"><tbody><tr><td class="gutter gl" style="text-align: right"><pre class="lineno">1</pre></td><td class="code"><pre><span class="gp">$ </span>pio build --verbose
</pre></td></tr></tbody></table> </div> <p>This command should take few minutes for the first time; all subsequent builds should be less than a minute. You can also run it without <code>--verbose</code> if you don&#39;t want to see all the log messages.</p><p>Upon successful build, you should see a console message similar to the following.</p><div class="highlight shell"><table style="border-spacing: 0"><tbody><tr><td class="gutter gl" style="text-align: right"><pre class="lineno">1</pre></td><td class="code"><pre><span class="o">[</span>INFO] <span class="o">[</span>Console<span class="nv">$]</span> Your engine is ready <span class="k">for </span>training.
</pre></td></tr></tbody></table> </div> <h3 id='training-the-predictive-model' class='header-anchors'>Training the Predictive Model</h3><p>To train your engine, run the following command:</p><div class="highlight shell"><table style="border-spacing: 0"><tbody><tr><td class="gutter gl" style="text-align: right"><pre class="lineno">1</pre></td><td class="code"><pre><span class="gp">$ </span>pio train
</pre></td></tr></tbody></table> </div> <p>When your engine is trained successfully, you should see a console message similar to the following.</p><div class="highlight shell"><table style="border-spacing: 0"><tbody><tr><td class="gutter gl" style="text-align: right"><pre class="lineno">1</pre></td><td class="code"><pre><span class="o">[</span>INFO] <span class="o">[</span>CoreWorkflow<span class="nv">$]</span> Training completed successfully.
</pre></td></tr></tbody></table> </div> <h3 id='deploying-the-engine' class='header-anchors'>Deploying the Engine</h3><p>Now your engine is ready to deploy. Run:</p><div class="highlight shell"><table style="border-spacing: 0"><tbody><tr><td class="gutter gl" style="text-align: right"><pre class="lineno">1</pre></td><td class="code"><pre><span class="gp">$ </span>pio deploy
</pre></td></tr></tbody></table> </div> <p>When the engine is deployed successfully and running, you should see a console message similar to the following:</p><div class="highlight shell"><table style="border-spacing: 0"><tbody><tr><td class="gutter gl" style="text-align: right"><pre class="lineno">1
2</pre></td><td class="code"><pre><span class="o">[</span>INFO] <span class="o">[</span>HttpListener] Bound to /0.0.0.0:8000
<span class="o">[</span>INFO] <span class="o">[</span>MasterActor] Bind successful. Ready to serve.
</pre></td></tr></tbody></table> </div> <p>Do not kill the deployed engine process.</p><p>By default, the deployed engine binds to <a href="http://localhost:8000"><a href="http://localhost:8000">http://localhost:8000</a></a>. You can visit that page in your web browser to check its status.</p><p><img alt="Engine Status" src="/images/engine-server-3246414b.png"/></p></p><h2 id='6.-use-the-engine' class='header-anchors'>6. Use the Engine</h2><p>Now, You can try to retrieve predicted results. For example, to predict the label (i.e. <em>plan</em> in this case) of a user with attr0=2, attr1=0 and attr2=0, you send this JSON <code>{ &quot;attr0&quot;:2, &quot;attr1&quot;:0, &quot;attr2&quot;:0 }</code> to the deployed engine and it will return a JSON of the predicted plan. Simply send a query by making a HTTP request or through the <code>EngineClient</code> of an SDK.</p><p>With the deployed engine running, open another terminal and run the following <code>curl</code> command or use SDK to send the query:</p><div class="tabs"> <ul class="control"> <li data-lang="bash"><a href="#tab-390a9ee3-ad09-43df-8baf-94bf4489844f">REST API</a></li> <li data-lang="python"><a href="#tab-2e9d4571-305d-4b5c-900a-e9c17cc0228f">Python SDK</a></li> <li data-lang="php"><a href="#tab-1bad3bed-00ad-4cfa-8996-6e1b14b52777">PHP SDK</a></li> <li data-lang="ruby"><a href="#tab-364301be-2320-42fb-b871-fdb55edfad12">Ruby SDK</a></li> <li data-lang="java"><a href="#tab-6852b26f-b86e-4d4a-93dc-5f1d84818782">Java SDK</a></li> </ul> <div data-tab="REST API" data-lang="bash" id="tab-390a9ee3-ad09-43df-8baf-94bf4489844f"> <div class="highlight shell"> <table style="border-spacing: 0"><tbody><tr> <td class="gutter gl" style="text-align: right"><pre class="lineno">1
2
3</pre></td> <td class="code"><pre><span class="gp">$ </span>curl -H <span class="s2">"Content-Type: application/json"</span> <span class="se">\</span>
-d <span class="s1">'{ "attr0":2, "attr1":0, "attr2":0 }'</span> http://localhost:8000/queries.json
</pre></td> </tr></tbody></table> </div> </div> <div data-tab="Python SDK" data-lang="python" id="tab-2e9d4571-305d-4b5c-900a-e9c17cc0228f"> <div class="highlight python"> <table style="border-spacing: 0"><tbody><tr> <td class="gutter gl" style="text-align: right"><pre class="lineno">1
2
3</pre></td> <td class="code"><pre><span class="kn">import</span> <span class="nn">predictionio</span>
<span class="n">engine_client</span> <span class="o">=</span> <span class="n">predictionio</span><span class="o">.</span><span class="n">EngineClient</span><span class="p">(</span><span class="n">url</span><span class="o">=</span><span class="s">"http://localhost:8000"</span><span class="p">)</span>
<span class="k">print</span> <span class="n">engine_client</span><span class="o">.</span><span class="n">send_query</span><span class="p">({</span><span class="s">"attr0"</span><span class="p">:</span><span class="mi">2</span><span class="p">,</span> <span class="s">"attr1"</span><span class="p">:</span><span class="mi">0</span><span class="p">,</span> <span class="s">"attr2"</span><span class="p">:</span><span class="mi">0</span><span class="p">})</span>
</pre></td> </tr></tbody></table> </div> </div> <div data-tab="PHP SDK" data-lang="php" id="tab-1bad3bed-00ad-4cfa-8996-6e1b14b52777"> <div class="highlight php"> <table style="border-spacing: 0"><tbody><tr> <td class="gutter gl" style="text-align: right"><pre class="lineno">1
2
3
4
5
6
7
8
9
10</pre></td> <td class="code"><pre><span class="cp">&lt;?php</span>
<span class="k">require_once</span><span class="p">(</span><span class="s2">"vendor/autoload.php"</span><span class="p">);</span>
<span class="k">use</span> <span class="nx">predictionio\EngineClient</span><span class="p">;</span>
<span class="nv">$client</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">EngineClient</span><span class="p">(</span><span class="s1">'http://localhost:8000'</span><span class="p">);</span>
<span class="nv">$response</span> <span class="o">=</span> <span class="nv">$client</span><span class="o">-&gt;</span><span class="na">sendQuery</span><span class="p">(</span><span class="k">array</span><span class="p">(</span><span class="s1">'attr0'</span><span class="o">=&gt;</span> <span class="mi">2</span><span class="p">,</span> <span class="s1">'attr1'</span> <span class="o">=&gt;</span> <span class="mi">0</span><span class="p">,</span> <span class="s1">'attr2'</span> <span class="o">=&gt;</span> <span class="mi">0</span><span class="p">));</span>
<span class="nb">print_r</span><span class="p">(</span><span class="nv">$response</span><span class="p">);</span>
<span class="cp">?&gt;</span>
</pre></td> </tr></tbody></table> </div> </div> <div data-tab="Ruby SDK" data-lang="ruby" id="tab-364301be-2320-42fb-b871-fdb55edfad12"> <div class="highlight ruby"> <table style="border-spacing: 0"><tbody><tr> <td class="gutter gl" style="text-align: right"><pre class="lineno">1
2
3
4
5
6
7</pre></td> <td class="code"><pre><span class="c1"># Create client object.</span>
<span class="n">client</span> <span class="o">=</span> <span class="no">PredictionIO</span><span class="o">::</span><span class="no">EngineClient</span><span class="p">.</span><span class="nf">new</span><span class="p">(</span><span class="o">&lt;</span><span class="no">ENGINE</span> <span class="no">DEPLOY</span> <span class="no">URL</span><span class="o">&gt;</span><span class="p">)</span>
<span class="c1"># Query PredictionIO.</span>
<span class="n">response</span> <span class="o">=</span> <span class="n">client</span><span class="p">.</span><span class="nf">send_query</span><span class="p">(</span><span class="s1">'attr0'</span> <span class="o">=&gt;</span> <span class="mi">2</span><span class="p">,</span> <span class="s1">'attr1'</span> <span class="o">=&gt;</span> <span class="mi">0</span><span class="p">,</span> <span class="s1">'attr2'</span> <span class="o">=&gt;</span> <span class="mi">0</span><span class="p">)</span>
<span class="nb">puts</span> <span class="n">response</span>
</pre></td> </tr></tbody></table> </div> </div> <div data-tab="Java SDK" data-lang="java" id="tab-6852b26f-b86e-4d4a-93dc-5f1d84818782"> <div class="highlight java"> <table style="border-spacing: 0"><tbody><tr> <td class="gutter gl" style="text-align: right"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
13</pre></td> <td class="code"><pre><span class="kn">import</span> <span class="nn">com.google.common.collect.ImmutableList</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">com.google.common.collect.ImmutableMap</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">com.google.gson.JsonObject</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">org.apache.predictionio.EngineClient</span><span class="o">;</span>
<span class="n">EngineClient</span> <span class="n">engineClient</span> <span class="o">=</span> <span class="k">new</span> <span class="n">EngineClient</span><span class="o">(&lt;</span><span class="n">ENGINE</span> <span class="n">DEPLOY</span> <span class="n">URL</span><span class="o">&gt;);</span>
<span class="n">JsonObject</span> <span class="n">response</span> <span class="o">=</span> <span class="n">engineClient</span><span class="o">.</span><span class="na">sendQuery</span><span class="o">(</span><span class="n">ImmutableMap</span><span class="o">.&lt;</span><span class="n">String</span><span class="o">,</span> <span class="n">Object</span><span class="o">&gt;</span><span class="n">of</span><span class="o">(</span>
<span class="s">"attr0"</span><span class="o">,</span> <span class="mi">2</span><span class="o">,</span>
<span class="s">"attr1"</span><span class="o">,</span> <span class="mi">0</span><span class="o">,</span>
<span class="s">"attr2"</span><span class="o">,</span> <span class="mi">0</span>
<span class="o">));</span>
</pre></td> </tr></tbody></table> </div> </div> </div> <div class="alert-message warning"><p>The Query format is changed since version v0.3.1. If you are using old Classification template version v0.3.0 or earlier, the query format is array of feature values instead: <code>{ &quot;features&quot;: [2, 0, 0] }</code>.</p></div><p>The following is sample JSON response:</p><div class="highlight shell"><table style="border-spacing: 0"><tbody><tr><td class="gutter gl" style="text-align: right"><pre class="lineno">1</pre></td><td class="code"><pre><span class="o">{</span><span class="s2">"label"</span>:0.0<span class="o">}</span>
</pre></td></tr></tbody></table> </div> <p>Similarly, to predict the label (i.e. <em>plan</em> in this case) of a user with attr0=4, attr1=3 and attr2=8, you send this JSON <code>{ &quot;attr0&quot;: 4, &quot;attr1&quot;: 3, &quot;attr2&quot;: 8] }</code> to the deployed engine and it will return a JSON of the predicted plan.</p><div class="alert-message warning"><p>For classification template version v0.3.0 or earlier, the query JSON would be <code>{ &quot;features&quot;: [4, 3, 8] }</code>.</p></div><p><em>MyClassification</em> is now running.</p> <div class="alert-message info"><p>To update the model periodically with new data, simply set up a cron job to call <code>pio train</code> and <code>pio deploy</code>. The engine will continue to serve prediction results during the re-train process. After the training is completed, <code>pio deploy</code> will automatically shutdown the existing engine server and bring up a new process on the same port.</p></div><div class="alert-message info"><p><strong>Note that if you import a <em>large</em> data set</strong> and the training seems to be taking forever or getting stuck, it&#39;s likely that there is not enough executor memory. It&#39;s recommended to setup a Spark standalone cluster, you&#39;ll need to specify more driver and executor memory when training with a large data set. Please see <a href="/resources/faq/#engine-training">FAQ here</a> for instructions.</p></div> <p>Next, we are going to take a look at the engine architecture and explain how you can customize it completely.</p><h4 id='<a-href="/templates/classification/dase/">next:-dase-components-explained</a>' class='header-anchors' ><a href="/templates/classification/dase/">Next: DASE Components Explained</a></h4></div></div></div></div><footer><div class="container"><div class="seperator"></div><div class="row"><div class="col-md-6 footer-link-column"><div class="footer-link-column-row"><h4>Community</h4><ul><li><a href="//predictionio.apache.org/install/" target="blank">Download</a></li><li><a href="//predictionio.apache.org/" target="blank">Docs</a></li><li><a href="//github.com/apache/predictionio" target="blank">GitHub</a></li><li><a href="mailto:user-subscribe@predictionio.apache.org" target="blank">Subscribe to User Mailing List</a></li><li><a href="//stackoverflow.com/questions/tagged/predictionio" target="blank">Stackoverflow</a></li></ul></div></div><div class="col-md-6 footer-link-column"><div class="footer-link-column-row"><h4>Contribute</h4><ul><li><a href="//predictionio.apache.org/community/contribute-code/" target="blank">Contribute</a></li><li><a href="//github.com/apache/predictionio" target="blank">Source Code</a></li><li><a href="//issues.apache.org/jira/browse/PIO" target="blank">Bug Tracker</a></li><li><a href="mailto:dev-subscribe@predictionio.apache.org" target="blank">Subscribe to Development Mailing List</a></li></ul></div></div></div><div class="row"><div class="col-md-12 footer-link-column"><p>Apache PredictionIO, PredictionIO, Apache, the Apache feather logo, and the Apache PredictionIO project logo are either registered trademarks or trademarks of The Apache Software Foundation in the United States and other countries.</p><p>All other marks mentioned may be trademarks or registered trademarks of their respective owners.</p></div></div></div><div id="footer-bottom"><div class="container"><div class="row"><div class="col-md-12"><div id="footer-logo-wrapper"><img alt="PredictionIO" src="/images/logos/logo-white-d1e9c6e6.png"/><span>®</span></div><div id="social-icons-wrapper"><a class="github-button" href="https://github.com/apache/predictionio" data-icon="octicon-star" data-show-count="true" aria-label="Star apache/predictionio on GitHub">Star</a> <a class="github-button" href="https://github.com/apache/predictionio/fork" data-icon="octicon-repo-forked" data-show-count="true" aria-label="Fork apache/predictionio on GitHub">Fork</a> <script id="github-bjs" async="" defer="" src="https://buttons.github.io/buttons.js"></script><a href="https://twitter.com/predictionio" target="blank"><img alt="PredictionIO on Twitter" src="/images/icons/twitter-ea9dc152.png"/></a> <a href="https://www.facebook.com/predictionio" target="blank"><img alt="PredictionIO on Facebook" src="/images/icons/facebook-5c57939c.png"/></a> </div></div></div></div></div></footer></div><script>(function(w,d,t,u,n,s,e){w['SwiftypeObject']=n;w[n]=w[n]||function(){
(w[n].q=w[n].q||[]).push(arguments);};s=d.createElement(t);
e=d.getElementsByTagName(t)[0];s.async=1;s.src=u;e.parentNode.insertBefore(s,e);
})(window,document,'script','//s.swiftypecdn.com/install/v1/st.js','_st');
_st('install','HaUfpXXV87xoB_zzCQ45');</script><script src="/javascripts/application-d943a254.js"></script></body></html>