http://git-wip-us.apache.org/repos/asf/incubator-predictionio-site/blob/4e7d331e/customize/dase/index.html
----------------------------------------------------------------------
diff --git a/customize/dase/index.html b/customize/dase/index.html
new file mode 100644
index 0000000..41c106e
--- /dev/null
+++ b/customize/dase/index.html
@@ -0,0 +1,219 @@
+<!DOCTYPE html><html><head><title>Implementing DASE</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="Implementing DASE"/><link 
rel="canonical" 
href="https://predictionio.incubator.apache.org/customize/dase/"/><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/M
 athJax.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.incubator.apache.org/";><img 
alt="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/incubator-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"><di
 v class="hidden-md hidden-lg" id="mobile-page-heading-wrapper"><p>PredictionIO 
Docs</p><h4>Implement DASE</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™ (incubating) 
Documentation</span></a><ul><li class="level-2"><a class="final" 
href="/"><span>Welcome to Apache PredictionIO 
(incubating)</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 (incubating)</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="/sdk/community/"><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="f
 inal" 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 active" 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" hre
 f="#"><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 cl
 ass="expandible" href="#"><span>Choosing an Algorithm(s)</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>ML 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><l
 i 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/reco
 mmendation/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>Clas
 sification</span></a><ul><li class="level-3"><a class="final" 
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 cla
 ss="expandible" href="#"><span>Demo Tutorials</span></a><ul><li 
class="level-2"><a class="final" href="/demo/tapster/"><span>Comics 
Recommendation Demo</span></a></li><li class="level-2"><a class="final" 
href="/demo/community/"><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 c
 lass="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="ex
 pandible" 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="#">Customizing an Engine</a><span 
class="spacer">&gt;</span></li><li><span class="last">Implement 
DASE</span></li></ul></div><div id="page-title"><h1>Implementing 
DASE</h1></div></div><div id="
 table-of-content-wrapper"><h5>On this page</h5><aside 
id="table-of-contents"><ul> <li> <a href="#datasource">DataSource</a> <ul> <li> 
<a href="#readtraining">readTraining()</a> </li> <li> <a 
href="#using-peventstore-engine-api">Using PEventStore Engine API</a> </li> 
</ul> </li> <li> <a href="#preparator">Preparator</a> <ul> <li> <a 
href="#prepare">prepare()</a> </li> </ul> </li> <li> <a 
href="#algorithm">Algorithm</a> <ul> <li> <a href="#train">train()</a> </li> 
<li> <a href="#predict">predict()</a> </li> <li> <a 
href="#p2lalgorithm">P2LAlgorithm</a> </li> <li> <a 
href="#palgorithm">PAlgorithm</a> </li> <li> <a 
href="#using-leventstore-engine-api-in-predict">using LEventStore Engine API in 
predict()</a> </li> </ul> </li> <li> <a href="#serving">Serving</a> <ul> <li> 
<a href="#serve">serve()</a> </li> </ul> </li> </ul> </aside><hr/><a 
id="edit-page-link" 
href="https://github.com/apache/incubator-predictionio/tree/livedoc/docs/manual/source/customize/dase.html.md.erb";><img
 src="/image
 s/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="#">Customizing an Engine</a><span 
class="spacer">&gt;</span></li><li><span class="last">Implement 
DASE</span></li></ul></div><div id="page-title"><h1>Implementing 
DASE</h1></div></div><div class="content"> <p>This section gives you an 
overview of DASE components and how to implement them. You will find links to 
some engine templates for more concrete examples.</p><h1 id='datasource' 
class='header-anchors'>DataSource</h1><p>DataSource reads and selects useful 
data from the Event Store (data store of the Event Server) and returns 
TrainingData.</p><h2 id='readtraining()' 
class='header-anchors'>readTraining()</h2><p>You need to implment 
readTraining() of <a 
href="https://predictionio.incubator.apache.org/api/current/#org.apache.predictionio.controller.PDataSource";>PDataSource</a>,
 where you can use the <a href="http
 
s://predictionio.incubator.apache.org/api/current/#org.apache.predictionio.data.store.PEventStore$">PEventStore
 Engine API</a> to read the events and create the TrainingData based on the 
events.</p><p>The following code example reads user &quot;view&quot; and 
&quot;buy&quot; item events, filters specific type of events for future 
processing and returns TrainingData accordingly.</p><div class="highlight 
scala"><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="k">class</span> <span 
class="nc">DataSource</span><span class="o">(</span><span class="k">val</span> 
<span class="n">dsp</span><span class="k">:</span> <span 
class="kt">DataSourceParams</span><span class="o">)</span>
+  <span class="k">extends</span> <span class="nc">PDataSource</span><span 
class="o">[</span><span class="kt">TrainingData</span>,
+      <span class="kt">EmptyEvaluationInfo</span>, <span 
class="kt">Query</span>, <span class="kt">EmptyActualResult</span><span 
class="o">]</span> <span class="o">{</span>
+
+  <span class="nd">@transient</span> <span class="k">lazy</span> <span 
class="k">val</span> <span class="n">logger</span> <span class="k">=</span> 
<span class="nc">Logger</span><span class="o">[</span><span 
class="kt">this.</span><span class="k">type</span><span class="o">]</span>
+
+  <span class="k">override</span>
+  <span class="k">def</span> <span class="n">readTraining</span><span 
class="o">(</span><span class="n">sc</span><span class="k">:</span> <span 
class="kt">SparkContext</span><span class="o">)</span><span class="k">:</span> 
<span class="kt">TrainingData</span> <span class="o">=</span> <span 
class="o">{</span>
+
+    <span class="k">val</span> <span class="n">eventsRDD</span><span 
class="k">:</span> <span class="kt">RDD</span><span class="o">[</span><span 
class="kt">Event</span><span class="o">]</span> <span class="k">=</span> <span 
class="nc">PEventStore</span><span class="o">.</span><span 
class="n">find</span><span class="o">(</span>
+      <span class="n">appName</span> <span class="k">=</span> <span 
class="n">dsp</span><span class="o">.</span><span class="n">appName</span><span 
class="o">,</span>
+      <span class="n">entityType</span> <span class="k">=</span> <span 
class="nc">Some</span><span class="o">(</span><span 
class="s">"user"</span><span class="o">),</span>
+      <span class="n">eventNames</span> <span class="k">=</span> <span 
class="nc">Some</span><span class="o">(</span><span class="nc">List</span><span 
class="o">(</span><span class="s">"view"</span><span class="o">,</span> <span 
class="s">"buy"</span><span class="o">)),</span>
+      <span class="c1">// targetEntityType is optional field of an event.
+</span>      <span class="n">targetEntityType</span> <span class="k">=</span> 
<span class="nc">Some</span><span class="o">(</span><span 
class="nc">Some</span><span class="o">(</span><span 
class="s">"item"</span><span class="o">)))(</span><span 
class="n">sc</span><span class="o">)</span>
+      <span class="o">.</span><span class="n">cache</span><span 
class="o">()</span>
+
+    <span class="k">val</span> <span class="n">viewEventsRDD</span><span 
class="k">:</span> <span class="kt">RDD</span><span class="o">[</span><span 
class="kt">ViewEvent</span><span class="o">]</span> <span class="k">=</span> 
<span class="n">eventsRDD</span>
+      <span class="o">.</span><span class="n">filter</span> <span 
class="o">{</span> <span class="n">event</span> <span class="k">=&gt;</span> 
<span class="n">event</span><span class="o">.</span><span 
class="n">event</span> <span class="o">==</span> <span class="s">"view"</span> 
<span class="o">}</span>
+      <span class="o">.</span><span class="n">map</span> <span 
class="o">{</span> <span class="o">...</span> <span class="o">}</span>
+
+    <span class="o">...</span>
+
+    <span class="k">new</span> <span class="nc">TrainingData</span><span 
class="o">(...)</span>
+  <span class="o">}</span>
+
+<span class="o">}</span>
+</pre></td></tr></tbody></table> </div> <h2 id='using-peventstore-engine-api' 
class='header-anchors'>Using PEventStore Engine API</h2><p>Please see <a 
href="https://predictionio.incubator.apache.org/datacollection/";>Event Server 
Overview</a> to understand <a 
href="https://predictionio.incubator.apache.org/datacollection/eventapi/";>EventAPI</a>
 and <a 
href="https://predictionio.incubator.apache.org/datacollection/eventmodel/";>event
 modeling</a>.</p><p>With <a 
href="https://predictionio.incubator.apache.org/api/current/#org.apache.predictionio.data.store.PEventStore$";>PEventStore
 Engine API</a>, you can easily read different events in DataSource and get the 
information you need.</p><p>For example, let&#39;s say you have events like the 
following:</p><div class="highlight json"><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="p">{</span><span class="w">
+  </span><span class="s2">"event"</span><span class="p">:</span><span 
class="w"> </span><span class="s2">"myEvent"</span><span 
class="p">,</span><span class="w">
+  </span><span class="s2">"entityType"</span><span class="p">:</span><span 
class="w"> </span><span class="s2">"user"</span><span class="p">,</span><span 
class="w">
+  </span><span class="s2">"entityId"</span><span class="p">:</span><span 
class="w"> </span><span class="s2">"u0"</span><span class="p">,</span><span 
class="w">
+  </span><span class="s2">"targetEntityType"</span><span 
class="p">:</span><span class="w"> </span><span class="s2">"item"</span><span 
class="p">,</span><span class="w">
+  </span><span class="s2">"targetEntityId"</span><span class="p">:</span><span 
class="w"> </span><span class="s2">"i0"</span><span class="p">,</span><span 
class="w">
+  </span><span class="s2">"properties"</span><span class="w"> </span><span 
class="p">:</span><span class="w"> </span><span class="p">{</span><span 
class="w">
+    </span><span class="s2">"a"</span><span class="w"> </span><span 
class="p">:</span><span class="w"> </span><span class="mi">3</span><span 
class="p">,</span><span class="w">
+    </span><span class="s2">"b"</span><span class="w"> </span><span 
class="p">:</span><span class="w"> </span><span 
class="s2">"some_string"</span><span class="p">,</span><span class="w">
+    </span><span class="s2">"c"</span><span class="w"> </span><span 
class="p">:</span><span class="w"> </span><span class="p">[</span><span 
class="s2">"a"</span><span class="p">,</span><span class="w"> </span><span 
class="s2">"b"</span><span class="p">,</span><span class="w"> </span><span 
class="s2">"c"</span><span class="p">],</span><span class="w">
+    </span><span class="s2">"d"</span><span class="w"> </span><span 
class="p">:</span><span class="w"> </span><span class="p">[</span><span 
class="mf">1.2</span><span class="p">,</span><span class="w"> </span><span 
class="mf">3.4</span><span class="p">,</span><span class="w"> </span><span 
class="mf">5.6</span><span class="p">],</span><span class="w">
+    </span><span class="s2">"e"</span><span class="w"> </span><span 
class="p">:</span><span class="w"> </span><span class="mi">6</span><span 
class="w">
+  </span><span class="p">}</span><span class="w">
+</span><span class="p">}</span><span class="w">
+</span></pre></td></tr></tbody></table> </div> <p>Then following code could 
read these events and extract the properties field of the event and convert it 
to a <code>MyEvent</code> object.</p><div class="highlight scala"><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</pre></td><td class="code"><pre>  <span class="k">val</span> <span 
class="n">myEvents</span><span class="k">:</span> <span 
class="kt">RDD</span><span class="o">[</span><span 
class="kt">MyEvent</span><span class="o">]</span> <span class="k">=</span> 
<span class="nc">PEventStore</span><span class="o">.</span><span 
class="n">find</span><span class="o">(</span>
+      <span class="n">appName</span> <span class="k">=</span> <span 
class="n">dsp</span><span class="o">.</span><span class="n">appName</span><span 
class="o">,</span>
+      <span class="n">entityType</span> <span class="k">=</span> <span 
class="nc">Some</span><span class="o">(</span><span 
class="s">"user"</span><span class="o">),</span>
+      <span class="n">eventNames</span> <span class="k">=</span> <span 
class="nc">Some</span><span class="o">(</span><span class="nc">List</span><span 
class="o">(</span><span class="s">"myEvent"</span><span class="o">)),</span>
+      <span class="c1">// targetEntityType is optional field of an event.
+</span>      <span class="n">targetEntityType</span> <span class="k">=</span> 
<span class="nc">Some</span><span class="o">(</span><span 
class="nc">Some</span><span class="o">(</span><span 
class="s">"item"</span><span class="o">)))(</span><span 
class="n">sc</span><span class="o">)</span>
+    <span class="o">.</span><span class="n">map</span> <span 
class="o">{</span> <span class="n">event</span> <span class="k">=&gt;</span>
+      <span class="k">try</span> <span class="o">{</span>
+        <span class="nc">MyEvent</span><span class="o">(</span>
+          <span class="n">entityId</span> <span class="k">=</span> <span 
class="n">event</span><span class="o">.</span><span 
class="n">entityId</span><span class="o">,</span>
+          <span class="n">targetEntityId</span> <span class="k">=</span> <span 
class="n">event</span><span class="o">.</span><span 
class="n">targetEntityId</span><span class="o">.</span><span 
class="n">get</span><span class="o">,</span>
+          <span class="n">a</span> <span class="k">=</span> <span 
class="n">event</span><span class="o">.</span><span 
class="n">properties</span><span class="o">.</span><span 
class="n">get</span><span class="o">[</span><span class="kt">Int</span><span 
class="o">](</span><span class="s">"a"</span><span class="o">),</span>
+          <span class="n">b</span> <span class="k">=</span> <span 
class="n">event</span><span class="o">.</span><span 
class="n">properties</span><span class="o">.</span><span 
class="n">get</span><span class="o">[</span><span class="kt">String</span><span 
class="o">](</span><span class="s">"b"</span><span class="o">),</span>
+          <span class="n">c</span> <span class="k">=</span> <span 
class="n">event</span><span class="o">.</span><span 
class="n">properties</span><span class="o">.</span><span 
class="n">get</span><span class="o">[</span><span class="kt">List</span><span 
class="o">[</span><span class="kt">String</span><span class="o">]](</span><span 
class="s">"c"</span><span class="o">),</span>
+          <span class="n">d</span> <span class="k">=</span> <span 
class="n">event</span><span class="o">.</span><span 
class="n">properties</span><span class="o">.</span><span 
class="n">get</span><span class="o">[</span><span class="kt">List</span><span 
class="o">[</span><span class="kt">Double</span><span class="o">]](</span><span 
class="s">"d"</span><span class="o">),</span>
+          <span class="n">e</span> <span class="k">=</span> <span 
class="n">event</span><span class="o">.</span><span 
class="n">properties</span><span class="o">.</span><span 
class="n">getOpt</span><span class="o">[</span><span class="kt">Int</span><span 
class="o">](</span><span class="s">"e"</span><span class="o">)</span> <span 
class="c1">// use getOpt for optional data
+</span>        <span class="o">)</span>
+      <span class="o">}</span> <span class="k">catch</span> <span 
class="o">{</span>
+        <span class="k">case</span> <span class="n">e</span><span 
class="k">:</span> <span class="kt">Exception</span> <span 
class="o">=&gt;</span>
+          <span class="n">logger</span><span class="o">.</span><span 
class="n">error</span><span class="o">(</span><span class="n">s</span><span 
class="s">"Cannot convert ${event}. Exception: ${e}."</span><span 
class="o">)</span>
+          <span class="k">throw</span> <span class="n">e</span>
+      <span class="o">}</span>
+    <span class="o">}</span>
+</pre></td></tr></tbody></table> </div> <p>If you have used special events 
<code>$set/$unset/$delete</code> setting entity&#39;s properties, you can 
retrieve it with <code>PEventStore.aggregateProperties()</code>.</p><p>Please 
see <a 
href="https://predictionio.incubator.apache.org/datacollection/eventmodel/";>event
 modeling</a> to understand usage of special <code>$set/$unset/$delete</code> 
events.</p><p>For example, the following code show how you could retrieve 
properties of the &quot;item&quot; entities:</p><div class="highlight 
scala"><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</pre></td><td class="code"><pre>    <span class="c1">// create a RDD of 
(entityID, Item)
+</span>    <span class="k">val</span> <span class="n">itemsRDD</span><span 
class="k">:</span> <span class="kt">RDD</span><span class="o">[(</span><span 
class="kt">String</span>, <span class="kt">Item</span><span class="o">)]</span> 
<span class="k">=</span> <span class="nc">PEventStore</span><span 
class="o">.</span><span class="n">aggregateProperties</span><span 
class="o">(</span>
+      <span class="n">appName</span> <span class="k">=</span> <span 
class="n">dsp</span><span class="o">.</span><span class="n">appName</span><span 
class="o">,</span>
+      <span class="n">entityType</span> <span class="k">=</span> <span 
class="s">"item"</span>
+    <span class="o">)(</span><span class="n">sc</span><span 
class="o">).</span><span class="n">map</span> <span class="o">{</span> <span 
class="k">case</span> <span class="o">(</span><span 
class="n">entityId</span><span class="o">,</span> <span 
class="n">properties</span><span class="o">)</span> <span class="k">=&gt;</span>
+
+      <span class="k">try</span> <span class="o">{</span>
+        <span class="k">val</span> <span class="n">item</span> <span 
class="k">=</span> <span class="nc">Item</span><span class="o">(</span>
+          <span class="n">a</span> <span class="k">=</span> <span 
class="n">preopties</span><span class="o">.</span><span 
class="n">get</span><span class="o">[</span><span class="kt">Int</span><span 
class="o">](</span><span class="s">"a"</span><span class="o">),</span>
+          <span class="n">b</span> <span class="k">=</span> <span 
class="n">properties</span><span class="o">.</span><span 
class="n">get</span><span class="o">[</span><span class="kt">String</span><span 
class="o">](</span><span class="s">"b"</span><span class="o">),</span>
+          <span class="n">c</span> <span class="k">=</span> <span 
class="n">properties</span><span class="o">.</span><span 
class="n">get</span><span class="o">[</span><span class="kt">List</span><span 
class="o">[</span><span class="kt">String</span><span class="o">]](</span><span 
class="s">"c"</span><span class="o">),</span>
+          <span class="n">d</span> <span class="k">=</span> <span 
class="n">properties</span><span class="o">.</span><span 
class="n">get</span><span class="o">[</span><span class="kt">List</span><span 
class="o">[</span><span class="kt">Double</span><span class="o">]](</span><span 
class="s">"d"</span><span class="o">),</span>
+          <span class="n">e</span> <span class="k">=</span> <span 
class="n">properties</span><span class="o">.</span><span 
class="n">getOpt</span><span class="o">[</span><span class="kt">Int</span><span 
class="o">](</span><span class="s">"e"</span><span class="o">)</span> <span 
class="c1">// use getOpt for optional data
+</span>        <span class="o">)</span>
+
+        <span class="o">(</span><span class="n">entityId</span><span 
class="o">,</span> <span class="n">item</span><span class="o">)</span>
+      <span class="o">}</span> <span class="k">catch</span> <span 
class="o">{</span>
+        <span class="k">case</span> <span class="n">e</span><span 
class="k">:</span> <span class="kt">Exception</span> <span 
class="o">=&gt;</span>
+          <span class="n">logger</span><span class="o">.</span><span 
class="n">error</span><span class="o">(</span><span class="n">s</span><span 
class="s">"Failed to get properties ${properties} of ${entityId}. Exception: 
${e}."</span><span class="o">)</span>
+          <span class="k">throw</span> <span class="n">e</span>
+      <span class="o">}</span>
+
+    <span class="o">}</span>
+</pre></td></tr></tbody></table> </div> <p>Example:</p> <ul> <li><a 
href="/templates/similarproduct/dase/#data">DataSource of Similar Product 
Template</a></li> </ul> <h1 id='preparator' 
class='header-anchors'>Preparator</h1><p>Preparator is responsible for 
pre-processing <code>TrainingData</code> for any necessary feature selection 
and data processing tasks and generate <code>PreparedData</code> which contains 
the data the Algorithm needs.</p><p>A few example usages of Preparator:</p> 
<ul> <li>Feature extraction</li> <li>Common pre-processing logic if you have 
multiple algorithms</li> <li>For simple cases, the Preparator may simply pass 
the same <code>TrainingData</code> as <code>PreparedData</code> for 
Algorithm.</li> </ul> <h2 id='prepare()' 
class='header-anchors'>prepare()</h2><p>You need to implement the 
<code>prepare()</code> method of <a 
href="https://predictionio.incubator.apache.org/api/current/#org.apache.predictionio.controller.PPreparator";>PPrepartor</a>
 to perform such t
 asks.</p><p>Example:</p> <ul> <li><a 
href="/templates/leadscoring/dase/#data">Preparator of Leading Scoring 
Template</a>: it pre-processes the TrainingData and generate the feature 
vectors needed for the algorithm.</li> <li><a 
href="/templates/similarproduct/dase/#data">Preparator of Similar Product 
Template</a>: it simply passes the TrainingData as PreparedData for the 
algorithm.</li> </ul> <h1 id='algorithm' 
class='header-anchors'>Algorithm</h1><p>The two methods of the Algorithm class 
are train() and predict():</p><h2 id='train()' 
class='header-anchors'>train()</h2><p>train() is responsible for training a 
predictive model. It is called when you run <code>pio train</code>. Apache 
PredictionIO (incubating) will store this model.</p><h2 id='predict()' 
class='header-anchors'>predict()</h2><p>predict() is responsible for using this 
model to make prediction. It is called when you send a JSON query to the 
engine. Note that predict() is called in real time.</p><p>Apache PredictionIO 
(inc
 ubating) supports two types of algorithms:</p> <ul> <li><strong><a 
href="https://predictionio.incubator.apache.org/api/current/#org.apache.predictionio.controller.P2LAlgorithm";>P2LAlgorithm</a></strong>:
 trains a Model which does not contain RDD</li> <li><strong><a 
href="https://predictionio.incubator.apache.org/api/current/#org.apache.predictionio.controller.PAlgorithm";>PAlgorithm</a></strong>:
 trains a Model which contains RDD</li> </ul> <h2 id='p2lalgorithm' 
class='header-anchors'>P2LAlgorithm</h2><p>For <code>P2LAlgorithm</code>, the 
Model is automatically serialized and persisted by Apache PredictionIO 
(incubating) after training.</p><p>Implementing <code>IPersistentModel</code> 
and <code>IPersistentModelLoader</code> is optional for 
P2LAlgorithm.</p><p>Example:</p> <ul> <li><a 
href="/templates/similarproduct/dase/#algorithm">Algorithm of Similar Product 
Template</a></li> </ul> <h2 id='palgorithm' 
class='header-anchors'>PAlgorithm</h2><p><code>PAlgorithm</code> should be used 
w
 hen your Model contains RDD. The model produced by <code>PAlgorithm</code> is 
not persisted by default. To persist the model, you need to do the 
following:</p> <ul> <li>The Model class should extend the 
<code>IPersistentModel</code> trait and implement the <code>save()</code> 
method for saving the model. The trait <code>IPersistentModel</code> requires a 
type parameter which is the class type of algorithm parameter.</li> 
<li>Implement a Model factory object which extends the 
<code>IPersistentModelLoader</code> trait and implement the 
<code>apply()</code> for loading the model. The trait 
<code>IPersistentModelLoader</code> requires two type parameters which are the 
types of algorithm parameter and the model produced by the algorithm.</li> 
</ul> <p>Example:</p> <ul> <li><a 
href="/templates/recommendation/dase/#algorithm">Algorithm of Recommendation 
Template</a>: it implements PAlgorithm and the IPersistentModel and 
IPersistentModelLoader.</li> <li><a href="/templates/vanilla/dase">Alg
 orithm of Vanilla Template</a>: it walks through example of P2LAlgorithm and 
PAlgorithm.</li> </ul> <h2 id='using-leventstore-engine-api-in-predict()' 
class='header-anchors'>using LEventStore Engine API in predict()</h2><p>You may 
use <a 
href="https://predictionio.incubator.apache.org/api/current/#org.apache.predictionio.data.store.LEventStore$";>LEventStore.findByEntity()</a>
 to retrieve events of a specific entity. For example, retrieve recent events 
of the user specified in the query) and use these recent events to make 
prediction in real time.</p><p>For example, the following code reads the recent 
10 view events of <code>query.user</code>:</p><div class="highlight 
scala"><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="k">val</span> <span 
class="n">recentEvents</span> <span class="k">=</span> <span 
class="k">try</span> <span class="o">{</span>
+      <span class="nc">LEventStore</span><span class="o">.</span><span 
class="n">findByEntity</span><span class="o">(</span>
+        <span class="n">appName</span> <span class="k">=</span> <span 
class="n">ap</span><span class="o">.</span><span class="n">appName</span><span 
class="o">,</span>
+        <span class="c1">// entityType and entityId is specified for fast 
lookup
+</span>        <span class="n">entityType</span> <span class="k">=</span> 
<span class="s">"user"</span><span class="o">,</span>
+        <span class="n">entityId</span> <span class="k">=</span> <span 
class="n">query</span><span class="o">.</span><span class="n">user</span><span 
class="o">,</span>
+        <span class="n">eventNames</span> <span class="k">=</span> <span 
class="nc">Some</span><span class="o">(</span><span class="nc">List</span><span 
class="o">(</span><span class="s">"view"</span><span class="o">)),</span>
+        <span class="n">targetEntityType</span> <span class="k">=</span> <span 
class="nc">Some</span><span class="o">(</span><span class="nc">Some</span><span 
class="o">(</span><span class="s">"item"</span><span class="o">)),</span>
+        <span class="n">limit</span> <span class="k">=</span> <span 
class="nc">Some</span><span class="o">(</span><span class="mi">10</span><span 
class="o">),</span>
+        <span class="n">latest</span> <span class="k">=</span> <span 
class="kc">true</span><span class="o">,</span>
+        <span class="c1">// set time limit to avoid super long DB access
+</span>        <span class="n">timeout</span> <span class="k">=</span> <span 
class="nc">Duration</span><span class="o">(</span><span 
class="mi">200</span><span class="o">,</span> <span 
class="s">"millis"</span><span class="o">)</span>
+      <span class="o">)</span>
+    <span class="o">}</span> <span class="k">catch</span> <span 
class="o">{</span>
+      <span class="k">case</span> <span class="n">e</span><span 
class="k">:</span> <span class="kt">scala.concurrent.TimeoutException</span> 
<span class="o">=&gt;</span>
+        <span class="n">logger</span><span class="o">.</span><span 
class="n">error</span><span class="o">(</span><span class="n">s</span><span 
class="s">"Timeout when read recent events."</span> <span class="o">+</span>
+          <span class="n">s</span><span class="s">" Empty list is used. 
${e}"</span><span class="o">)</span>
+        <span class="nc">Iterator</span><span class="o">[</span><span 
class="kt">Event</span><span class="o">]()</span>
+      <span class="k">case</span> <span class="n">e</span><span 
class="k">:</span> <span class="kt">Exception</span> <span 
class="o">=&gt;</span>
+        <span class="n">logger</span><span class="o">.</span><span 
class="n">error</span><span class="o">(</span><span class="n">s</span><span 
class="s">"Error when read recent events: ${e}"</span><span class="o">)</span>
+        <span class="k">throw</span> <span class="n">e</span>
+    <span class="o">}</span>
+</pre></td></tr></tbody></table> </div> <p>Example:</p> <ul> <li><a 
href="/templates/ecommercerecommendation/dase#algorithm">Algorithm of 
E-Commerce Recommendation template</a>: LEventStore.findByEntity() is used to 
retrieve all items seen by the user and filter them from recommendation in 
predict().</li> </ul> <h1 id='serving' class='header-anchors'>Serving</h1><h2 
id='serve()' class='header-anchors'>serve()</h2><p>You need to implement the 
serve() method of the class <a 
href="https://predictionio.incubator.apache.org/api/current/#org.apache.predictionio.controller.LServing";>LServing</a>.
 The serve() method processes predicted result. It is also responsible for 
combining multiple predicted results into one if you have more than one 
predictive model.</p><p>Example:</p> <ul> <li><a 
href="/templates/similarproduct/dase/#serving">Serving of Similar Product 
Template</a>: It simply returns the predicted result</li> <li><a 
href="/templates/similarproduct/multi-events-multi-algos/">Serving
  of multi-algorithm examples of Similar Product Template</a>: It combines the 
result of multiple algorithms and return</li> </ul> 
</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.incubator.apache.org/install/" 
target="blank">Download</a></li><li><a 
href="//predictionio.incubator.apache.org/" target="blank">Docs</a></li><li><a 
href="//github.com/apache/incubator-predictionio" 
target="blank">GitHub</a></li><li><a 
href="mailto:[email protected]"; 
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.incubator.apache.org/community/contribut
 e-code/" target="blank">Contribute</a></li><li><a 
href="//github.com/apache/incubator-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:[email protected]"; 
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 
class="row"><div class="col-md-12 footer-link-column"><a class="pull-right" 
href="http://incubator.apache.org/projects/predictionio.html";><img alt="Apache 
Incubator" src="/images/logos/apache_incubator-6954b
 d16.png"/></a><span>Apache PredictionIO is an effort undergoing incubation at 
The Apache Software Foundation (ASF), sponsored by the Apache Incubator. 
Incubation is required of all newly accepted projects until a further review 
indicates that the infrastructure, communications, and decision making process 
have stabilized in a manner consistent with other successful ASF projects. 
While incubation status is not necessarily a reflection of the completeness or 
stability of the code, it does indicate that the project has yet to be fully 
endorsed by the ASF.</span></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/incubator-predictionio"; data-style="mega" 
data-count-href="/apache/incubator-predictionio/stargazers" data-count-api="
 /repos/apache/incubator-predictionio#stargazers_count" 
data-count-aria-label="# stargazers on GitHub" aria-label="Star 
apache/incubator-predictionio on GitHub">Star</a> <a class="github-button" 
href="https://github.com/apache/incubator-predictionio/fork"; 
data-icon="octicon-git-branch" data-style="mega" 
data-count-href="/apache/incubator-predictionio/network" 
data-count-api="/repos/apache/incubator-predictionio#forks_count" 
data-count-aria-label="# forks on GitHub" aria-label="Fork 
apache/incubator-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-a6acb1f5.js"></script></body></html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-predictionio-site/blob/4e7d331e/customize/dase/index.html.gz
----------------------------------------------------------------------
diff --git a/customize/dase/index.html.gz b/customize/dase/index.html.gz
new file mode 100644
index 0000000..1bc7a69
Binary files /dev/null and b/customize/dase/index.html.gz differ

http://git-wip-us.apache.org/repos/asf/incubator-predictionio-site/blob/4e7d331e/customize/index.html
----------------------------------------------------------------------
diff --git a/customize/index.html b/customize/index.html
new file mode 100644
index 0000000..acea723
--- /dev/null
+++ b/customize/index.html
@@ -0,0 +1,6 @@
+<!DOCTYPE html><html><head><title>Learning DASE</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="Learning DASE"/><link rel="canonical" 
href="https://predictionio.incubator.apache.org/customize/"/><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?con
 fig=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.incubator.apache.org/";><img 
alt="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/incubator-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="hidd
 en-md hidden-lg" id="mobile-page-heading-wrapper"><p>PredictionIO 
Docs</p><h4>Learning DASE</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™ (incubating) 
Documentation</span></a><ul><li class="level-2"><a class="final" 
href="/"><span>Welcome to Apache PredictionIO 
(incubating)</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 (incubating)</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="/sdk/community/"><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="/d
 eploy/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 active" 
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>Co
 llecting 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="expandibl
 e" href="#"><span>Choosing an Algorithm(s)</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>ML 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/bat
 ch-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</sp
 an></a><ul><li class="level-3"><a class="final" 
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="/demo/tapster/"><span>Comics Recommendation 
Demo</span></a></li><li class="level-2"><a class="final" 
href="/demo/community/"><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" h
 ref="/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="#">Customizing an Engine</a><span 
class="spacer">&gt;</span></li><li><span class="last">Learning 
DASE</span></li></ul></div><div id="page-title"><h1>Learning 
DASE</h1></div></div><div id="table-of-content-wr
 apper"><h5>On this page</h5><aside id="table-of-contents"><ul> <li> <a 
href="#the-roles-of-an-engine">The Roles of an Engine</a> </li> <li> <a 
href="#examples-of-dase">Examples of DASE</a> </li> </ul> </aside><hr/><a 
id="edit-page-link" 
href="https://github.com/apache/incubator-predictionio/tree/livedoc/docs/manual/source/customize/index.html.md";><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="#">Customizing an Engine</a><span 
class="spacer">&gt;</span></li><li><span class="last">Learning 
DASE</span></li></ul></div><div id="page-title"><h1>Learning 
DASE</h1></div></div><div class="content"> <p>The code of an engine consists of 
D-A-S-E components:</p><h3 id='[d]-data-source-and-data-preparator' 
class='header-anchors'>[D] Data Source and Data Preparator</h3><p>Data Source 
reads data from an input source and transforms it into a desired format. D
 ata Preparator preprocesses the data and forwards it to the algorithm for 
model training.</p><h3 id='[a]-algorithm' class='header-anchors'>[A] 
Algorithm</h3><p>The Algorithm component includes the Machine Learning 
algorithm, and the settings of its parameters, determines how a predictive 
model is constructed.</p><h3 id='[s]-serving' class='header-anchors'>[S] 
Serving</h3><p>The Serving component takes prediction <em>queries</em> and 
returns prediction results. If the engine has multiple algorithms, Serving will 
combine the results into one. Additionally, business-specific logic can be 
added in Serving to further customize the final returned results.</p><h3 
id='[e]-evaluation-metrics' class='header-anchors'>[E] Evaluation 
Metrics</h3><p>An Evaluation Metric quantifies prediction accuracy with a 
numerical score. It can be used for comparing algorithms or algorithm parameter 
settings.</p> <blockquote> <p>Apache PredictionIO (incubating) helps you 
modularize these components so you can 
 build, for example, several Serving components for an Engine. You will be able 
to choose which one to be deployed when you create an Engine.</p></blockquote> 
<p><img alt="Engine Overview" 
src="/images/engineinstance-overview-c6668657.png"/></p><h2 
id='the-roles-of-an-engine' class='header-anchors'>The Roles of an 
Engine</h2><p>The main functions of an engine are:</p> <ul> <li>Train a model 
using the training data and be deployed as a web service</li> <li>Respond to 
prediction query in real-time</li> </ul> <p>An engine puts all DASE components 
into a deployable state by specifying:</p> <ul> <li><p>One Data Source</p></li> 
<li><p>One Data Preparator</p></li> <li><p>One or more Algorithm(s)</p></li> 
<li><p>One Serving</p></li> </ul> <div class="alert-message info"><p>If more 
than one algorithm is specified, each of their model prediction results will be 
passed to Serving for ensembling.</p></div><p>Each Engine processes data and 
constructs predictive models independently. Therefore, ev
 ery engine serves its own set of prediction results. For example, you may 
deploy two engines for your mobile application: one for recommending news to 
users and another one for suggesting new friends to users.</p><h3 
id='training-a-model---the-dase-view' class='header-anchors'>Training a Model - 
The DASE View</h3><p>The following graph shows the workflow of DASE components 
when <code>pio train</code> is run.</p><p><img alt="Engine Overview" 
src="/images/engine-training-93bc1b69.png"/></p><h3 
id='respond-to-prediction-query---the-dase-view' class='header-anchors'>Respond 
to Prediction Query - The DASE View</h3><p>The following graph shows the 
workflow of DASE components when a REST query is received by a deployed 
engine.</p><p><img alt="Engine Overview" 
src="/images/engine-query-8d7311ff.png"/></p><p>Please see <a 
href="/customize/dase">Implement DASE</a> for DASE implementation 
details.</p><p>Please refer to following templates and their how-to guides for 
concrete examples.</p><h2 i
 d='examples-of-dase' class='header-anchors'>Examples of DASE</h2> <ul> <li><a 
href="/templates/recommendation/dase/">DASE of Recommendation Template</a></li> 
<li><a href="/templates/similarproduct/dase/">DASE of Similar Product 
Template</a></li> <li><a href="/templates/classification/dase/">DASE of 
Classification Template</a></li> <li><a 
href="/templates/leadscoring/dase/">DASE of Lead Scoring Template</a></li> 
</ul> </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.incubator.apache.org/install/" 
target="blank">Download</a></li><li><a 
href="//predictionio.incubator.apache.org/" target="blank">Docs</a></li><li><a 
href="//github.com/apache/incubator-predictionio" 
target="blank">GitHub</a></li><li><a 
href="mailto:[email protected]"; 
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.incubator.apache.org/community/contribute-code/" 
target="blank">Contribute</a></li><li><a 
href="//github.com/apache/incubator-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:[email protected]"; 
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 class="row"><div class="col-md-12 
footer-link-column"><a class="pull-right" 
href="http://incubator.apache.org/projects/predictionio.html";><img alt="Apache 
Incubator" src="/images/logos/apache_incubator-6954bd16.png"/></a><span>Apache 
PredictionIO is an effort undergoing incubation at The Apache Software 
Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of 
all newly accepted projects until a further review indicates that the 
infrastructure, communications, and decision making process have stabilized in 
a manner consistent with other successful ASF projects. While incubation status 
is not necessarily a reflection of the completeness or stability of the code, 
it does indicate that the project has yet to be fully endorsed by the 
ASF.</span></div></div></div><div id="footer-bottom"><div 
class="container"><div class="row"><div class="col-md-12"><div 
id="footer-logo-wrapper"><img a
 lt="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/incubator-predictionio"; data-style="mega" 
data-count-href="/apache/incubator-predictionio/stargazers" 
data-count-api="/repos/apache/incubator-predictionio#stargazers_count" 
data-count-aria-label="# stargazers on GitHub" aria-label="Star 
apache/incubator-predictionio on GitHub">Star</a> <a class="github-button" 
href="https://github.com/apache/incubator-predictionio/fork"; 
data-icon="octicon-git-branch" data-style="mega" 
data-count-href="/apache/incubator-predictionio/network" 
data-count-api="/repos/apache/incubator-predictionio#forks_count" 
data-count-aria-label="# forks on GitHub" aria-label="Fork 
apache/incubator-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="Predicti
 onIO 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-a6acb1f5.js"></script></body></html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-predictionio-site/blob/4e7d331e/customize/index.html.gz
----------------------------------------------------------------------
diff --git a/customize/index.html.gz b/customize/index.html.gz
new file mode 100644
index 0000000..96adafb
Binary files /dev/null and b/customize/index.html.gz differ

Reply via email to