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.