Apache PredictionIO и Apache Zeppelin являются программным обеспечением с открытым исходным кодом в рамках Apache Software Foundation. PredictionIO - это сервер машинного обучения, основанный на Apache Spark и SparkML / MLlib. Он хранит данные о событиях в СУБД, HBase или Elasticsearch и использует эти данные для обучения или проверки. Zeppelin - это портативный сервер для Apache Spark и SparkSQL.
Однажды я подумал, что может быть полезно, если мы сможем импортировать и запрашивать данные о событиях PredictionIO на Zeppelin. Затем я создал крошечную библиотеку для выполнения этих операций, которую можно использовать даже на Zeppelin.
Поскольку эта библиотека доступна в центральном репозитории Maven, ее можно использовать в Zeppelin, просто загрузив ее следующим образом:
%dep z.load("com.github.takezoe:predictionio-toolbox_2.11:0.0.1")
Затем мы можем получать события, используя PIOToolbox
в качестве RDD, и регистрировать их как таблицы, к которым можно получить доступ из SparkSQL:
import com.github.takezoe.predictionio.toolbox._ // Create toolbox with PIO_HOME val toolbox = PIOToolbox("/Users/naoki.takezoe/PredictionIO-0.12.1") val eventsRDD = toolbox.find("MyApp1")(sc) case class Rating( user: String, item: String, rating: Double ) val ratingRDD = eventsRDD.map { event => val ratingValue: Double = event.event match { case "rate" => event.properties.get[Double]("rating") case "buy" => 4.0 // map buy event to rating value of 4 case _ => throw new Exception(s"Unexpected event ${event} is read.") } // entityId and targetEntityId is String Rating(event.entityId, event.targetEntityId.get, ratingValue) } val df = spark.createDataFrame(ratingRDD) df.registerTempTable("rating")
Теперь мы можем анализировать данные о событиях с помощью SQL:
%sql select rating, count(*) from rating group by rating
Кроме того, мы также можем регистрировать данные о событиях, используя PIOToolbox
. См. Исходный код PIOToolbox, чтобы узнать обо всех готовых API.
Я думаю, что PredictionIO и Zeppelin - хорошая комбинация. Мы можем импортировать большие данные в PredictionIO как RDD на Zeppelin. Также мы можем анализировать эти данные с помощью SparkSQL на Zeppelin. Мы можем использовать Zeppelin для предварительной обработки приложений машинного обучения, основанных на PredictionIO.