Cool, Now every working template has engine.json and appName field as far as I know.
Great it worked. Thanks Vaghawan On Thu, Jul 27, 2017 at 5:13 PM, Darshan A.N. <[email protected]> wrote: > hi, > i think i kind of found where did i do mistake, its not my mistake > actually... its document makers mistake. > In DEMO-TAPSTER , they had mentioned about appID, which suits the old > template. right now i discontinued following that doc. I' m using > https://predictionio.incubator.apache.org/templates/similarproduct/ > quickstart/ for further, until i get deserved output. > > > You may see appId in engine.json instead, which means you are using old > template. In this case, make sure the appId defined in the file match > your *App ID*. Alternatively, you can download the latest version of the > template or follow our upgrade instructions > <https://predictionio.incubator.apache.org/resources/upgrade/#upgrade-to-0.9.2> > to modify the template to use appName as parameter. > > > > thanks VO for sending me the QuickStart link. > -DAN > > > > On Thu, Jul 27, 2017 at 2:45 PM, Darshan A.N. <[email protected]> > wrote: > >> VO, >> thanks, i ll look into it. i just sent u chat request, could u please >> accept it. i ll not bother u much. >> >> -DAN >> >> On Thu, Jul 27, 2017 at 2:41 PM, Vaghawan Ojha <[email protected]> >> wrote: >> >>> Hi Darshan, >>> >>> Thanks, yes I myself had undergone with so many difficulties during >>> installation so I had covered them in that article. Also I've been trying >>> to make one or two examples with ur in the pio docs. >>> >>> For your current error, you need to change the appName in engine.json >>> and rebuild your app again. >>> >>> On Thu, Jul 27, 2017 at 2:49 PM, Darshan A.N. <[email protected]> >>> wrote: >>> >>>> hi VO, >>>> thats really impressive article you have written. i need to install >>>> that DEMO-tapster. my repository is mysql, could you please help me solving >>>> it? >>>> thanks and cheers for ur article, i suppose it must be helpful for lot >>>> of noobies like me. >>>> -DAN >>>> >>>> On Wed, Jul 26, 2017 at 3:37 PM, Vaghawan Ojha <[email protected]> >>>> wrote: >>>> >>>>> Hi Darshan, >>>>> >>>>> I had written a brief article on medium to start from scratch, you >>>>> could follow that as well. https://medium.freecodec >>>>> amp.org/building-an-recommendation-engine-with-apache-predic >>>>> tion-io-ml-server-aed0319e0d8 >>>>> here's the link. I myself had faced lots of problems while >>>>> installation, but pio and ur community is great for instant support. I've >>>>> included common errors and there troubleshooting as well. >>>>> >>>>> Hope this helps. >>>>> >>>>> Thanks >>>>> Vaghawan >>>>> >>>>> On Wed, Jul 26, 2017 at 3:37 PM, Tom Chan <[email protected]> >>>>> wrote: >>>>> >>>>>> darshan@darshu:~/PredictionIO/tapster-episode-similar/src/main/scala$ >>>>>> pio train >>>>>> >>>>>> Can you try the command from the tapster-episode-similar directory? >>>>>> >>>>>> Tom >>>>>> >>>>>> On Jul 26, 2017 2:45 AM, "Darshan A.N." <[email protected]> >>>>>> wrote: >>>>>> >>>>>>> hi team, >>>>>>> i am trying to install demo tapster. i followed >>>>>>> http://predictionio.incubator.apache.org/demo/tapster/. It took >>>>>>> more than a week to install predictionio. >>>>>>> now that i m installed the PIO, its throwing me error while running >>>>>>> the $pio build command. the error goes like this: >>>>>>> darshan@darshu:~/PredictionIO/tapster-episode-similar$ pio build >>>>>>> SLF4J: Class path contains multiple SLF4J bindings. >>>>>>> SLF4J: Found binding in [jar:file:/home/darshan/Predic >>>>>>> tionIO/lib/spark/pio-data-hdfs-assembly-0.11.0-incubating.ja >>>>>>> r!/org/slf4j/impl/StaticLoggerBinder.class] >>>>>>> SLF4J: Found binding in [jar:file:/home/darshan/Predic >>>>>>> tionIO/lib/pio-assembly-0.11.0-incubating.jar!/org/slf4j/imp >>>>>>> l/StaticLoggerBinder.class] >>>>>>> SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an >>>>>>> explanation. >>>>>>> SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory] >>>>>>> [INFO] [Engine$] Using command '/home/darshan/PredictionIO/sbt/sbt' >>>>>>> at /home/darshan/PredictionIO/tapster-episode-similar to build. >>>>>>> [INFO] [Engine$] If the path above is incorrect, this process will >>>>>>> fail. >>>>>>> [INFO] [Engine$] Uber JAR disabled. Making sure >>>>>>> lib/pio-assembly-0.11.0-incubating.jar is absent. >>>>>>> [INFO] [Engine$] Going to run: /home/darshan/PredictionIO/sbt/sbt >>>>>>> package assemblyPackageDependency in /home/darshan/PredictionIO/tap >>>>>>> ster-episode-similar >>>>>>> [ERROR] [Engine$] [error] /home/darshan/PredictionIO/tap >>>>>>> ster-episode-similar/src/main/scala/DataSource.scala:63: not found: >>>>>>> value eventsDb >>>>>>> [ERROR] [Engine$] [error] val viewEventsRDD: RDD[ViewEvent] = >>>>>>> eventsDb.find( >>>>>>> [ERROR] [Engine$] [error] ^ >>>>>>> [ERROR] [Engine$] [error] one error found >>>>>>> [ERROR] [Engine$] [error] (compile:compileIncremental) Compilation >>>>>>> failed >>>>>>> [ERROR] [Engine$] [error] Total time: 5 s, completed 26 Jul, 2017 >>>>>>> 1:56:50 AM >>>>>>> [ERROR] [Engine$] Return code of build command: >>>>>>> /home/darshan/PredictionIO/sbt/sbt package >>>>>>> assemblyPackageDependency is 1. Aborting. >>>>>>> [INFO] [Engine$] Looking for an engine... >>>>>>> [INFO] [Engine$] Found template-scala-parallel-simila >>>>>>> rproduct_2.10-0.1-SNAPSHOT.jar >>>>>>> [INFO] [Engine$] Found template-scala-parallel-simila >>>>>>> rproduct-assembly-0.1-SNAPSHOT-deps.jar >>>>>>> [INFO] [Engine$] Build finished successfully. >>>>>>> [INFO] [Pio$] Your engine is ready for training. >>>>>>> >>>>>>> >>>>>>> and the file DataSource.scala, >>>>>>> >>>>>>> >>>>>>> package org.example.similarproduct >>>>>>> >>>>>>> import org.apache.predictionio.controller.PDataSource >>>>>>> import org.apache.predictionio.controller.EmptyEvaluationInfo >>>>>>> import org.apache.predictionio.controller.EmptyActualResult >>>>>>> import org.apache.predictionio.controller.Params >>>>>>> import org.apache.predictionio.data.storage.Event >>>>>>> import org.apache.predictionio.data.store.PEventStore >>>>>>> >>>>>>> import org.apache.spark.SparkContext >>>>>>> import org.apache.spark.SparkContext._ >>>>>>> import org.apache.spark.rdd.RDD >>>>>>> >>>>>>> import grizzled.slf4j.Logger >>>>>>> >>>>>>> case class DataSourceParams(appName: String) extends Params >>>>>>> >>>>>>> class DataSource(val dsp: DataSourceParams) >>>>>>> extends PDataSource[TrainingData, >>>>>>> EmptyEvaluationInfo, Query, EmptyActualResult] { >>>>>>> >>>>>>> @transient lazy val logger = Logger[this.type] >>>>>>> >>>>>>> override >>>>>>> def readTraining(sc: SparkContext): TrainingData = { >>>>>>> >>>>>>> // create a RDD of (entityID, User) >>>>>>> val usersRDD: RDD[(String, User)] = >>>>>>> PEventStore.aggregateProperties( >>>>>>> appName = dsp.appName, >>>>>>> entityType = "user" >>>>>>> )(sc).map { case (entityId, properties) => >>>>>>> val user = try { >>>>>>> User() >>>>>>> } catch { >>>>>>> case e: Exception => { >>>>>>> logger.error(s"Failed to get properties ${properties} of" + >>>>>>> s" user ${entityId}. Exception: ${e}.") >>>>>>> throw e >>>>>>> } >>>>>>> } >>>>>>> (entityId, user) >>>>>>> }.cache() >>>>>>> >>>>>>> // create a RDD of (entityID, Item) >>>>>>> val itemsRDD: RDD[(String, Item)] = >>>>>>> PEventStore.aggregateProperties( >>>>>>> appName = dsp.appName, >>>>>>> entityType = "item" >>>>>>> )(sc).map { case (entityId, properties) => >>>>>>> val item = try { >>>>>>> // Assume categories is optional property of item. >>>>>>> Item(categories = properties.getOpt[List[String] >>>>>>> ]("categories")) >>>>>>> } catch { >>>>>>> case e: Exception => { >>>>>>> logger.error(s"Failed to get properties ${properties} of" + >>>>>>> s" item ${entityId}. Exception: ${e}.") >>>>>>> throw e >>>>>>> } >>>>>>> } >>>>>>> (entityId, item) >>>>>>> }.cache() >>>>>>> >>>>>>> // get all "user" "view" "item" events >>>>>>> val viewEventsRDD: RDD[ViewEvent] = eventsDb.find( >>>>>>> appId = dsp.appId, >>>>>>> entityType = Some("user"), >>>>>>> eventNames = Some(List("like")), >>>>>>> // targetEntityType is optional field of an event. >>>>>>> targetEntityType = Some(Some("item")))(sc) >>>>>>> // eventsDb.find() returns RDD[Event] >>>>>>> .map { event => >>>>>>> val viewEvent = try { >>>>>>> event.event match { >>>>>>> case "like" => ViewEvent( >>>>>>> user = event.entityId, >>>>>>> item = event.targetEntityId.get, >>>>>>> t = event.eventTime.getMillis) >>>>>>> case _ => throw new Exception(s"Unexpected event >>>>>>> ${event} is read.") >>>>>>> } >>>>>>> } catch { >>>>>>> case e: Exception => { >>>>>>> logger.error(s"Cannot convert ${event} to ViewEvent." + >>>>>>> s" Exception: ${e}.") >>>>>>> throw e >>>>>>> } >>>>>>> } >>>>>>> viewEvent >>>>>>> }.cache() >>>>>>> >>>>>>> new TrainingData( >>>>>>> users = usersRDD, >>>>>>> items = itemsRDD, >>>>>>> viewEvents = viewEventsRDD >>>>>>> ) >>>>>>> } >>>>>>> } >>>>>>> >>>>>>> case class User() >>>>>>> >>>>>>> case class Item(categories: Option[List[String]]) >>>>>>> >>>>>>> case class ViewEvent(user: String, item: String, t: Long) >>>>>>> >>>>>>> class TrainingData( >>>>>>> val users: RDD[(String, User)], >>>>>>> val items: RDD[(String, Item)], >>>>>>> val viewEvents: RDD[ViewEvent] >>>>>>> ) extends Serializable { >>>>>>> override def toString = { >>>>>>> s"users: [${users.count()} (${users.take(2).toList}...)]" + >>>>>>> s"items: [${items.count()} (${items.take(2).toList}...)]" + >>>>>>> s"viewEvents: [${viewEvents.count()}] >>>>>>> (${viewEvents.take(2).toList}...)" >>>>>>> } >>>>>>> } >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> while training, it gives me following error, >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> darshan@darshu:~/PredictionIO/tapster-episode-similar/src/main/scala$ >>>>>>> pio train >>>>>>> SLF4J: Class path contains multiple SLF4J bindings. >>>>>>> SLF4J: Found binding in [jar:file:/home/darshan/Predic >>>>>>> tionIO/lib/spark/pio-data-hdfs-assembly-0.11.0-incubating.ja >>>>>>> r!/org/slf4j/impl/StaticLoggerBinder.class] >>>>>>> SLF4J: Found binding in [jar:file:/home/darshan/Predic >>>>>>> tionIO/lib/pio-assembly-0.11.0-incubating.jar!/org/slf4j/imp >>>>>>> l/StaticLoggerBinder.class] >>>>>>> SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an >>>>>>> explanation. >>>>>>> SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory] >>>>>>> [WARN] [Template$] /home/darshan/PredictionIO/tap >>>>>>> ster-episode-similar/src/main/scala/template.json does not exist. >>>>>>> Template metadata will not be available. (This is safe to ignore if you >>>>>>> are >>>>>>> not working on a template.) >>>>>>> Exception in thread "main" java.io.FileNotFoundException: >>>>>>> /home/darshan/PredictionIO/tapster-episode-similar/src/main/scala/engine.json >>>>>>> (No such file or directory) >>>>>>> at java.io.FileInputStream.open0(Native Method) >>>>>>> at java.io.FileInputStream.open(FileInputStream.java:195) >>>>>>> at java.io.FileInputStream.<init>(FileInputStream.java:138) >>>>>>> at scala.io.Source$.fromFile(Source.scala:90) >>>>>>> at scala.io.Source$.fromFile(Source.scala:75) >>>>>>> at org.apache.predictionio.tools.console.Console$.getEngineInfo >>>>>>> (Console.scala:724) >>>>>>> at org.apache.predictionio.tools.RunWorkflow$.runWorkflow(RunWo >>>>>>> rkflow.scala:54) >>>>>>> at org.apache.predictionio.tools.commands.Engine$.train(Engine. >>>>>>> scala:186) >>>>>>> at org.apache.predictionio.tools.console.Pio$.train(Pio.scala:8 >>>>>>> 5) >>>>>>> at org.apache.predictionio.tools.console.Console$$anonfun$main$ >>>>>>> 1.apply(Console.scala:626) >>>>>>> at org.apache.predictionio.tools.console.Console$$anonfun$main$ >>>>>>> 1.apply(Console.scala:611) >>>>>>> at scala.Option.map(Option.scala:145) >>>>>>> at org.apache.predictionio.tools.console.Console$.main(Console. >>>>>>> scala:611) >>>>>>> at org.apache.predictionio.tools.console.Console.main(Console.s >>>>>>> cala) >>>>>>> >>>>>>> >>>>>>> >>>>>>> i tried almost all the things, but could not find the proper >>>>>>> solution. please help me... >>>>>>> i know you may feel bit odd about this mail, but in need of your >>>>>>> help. >>>>>>> >>>>>>> thanks, >>>>>>> >>>>>>> >>>>>>> -DAN >>>>>>> >>>>>> >>>>> >>>> >>> >> >
