我正在使用play framework 2.2.0并使用salat为play + scala配置了mongo。
我通过在build.sbt中添加以下内容来集成spark以及
"org.apache.spark" %% "spark-core" % "1.1.0",
"com.typesafe.akka" %% "akka-actor" % "2.2.3",
"com.typesafe.akka" %% "akka-slf4j" % "2.2.3",
"org.mongodb" % "mongo-hadoop-core" % "1.3.0",
"org.apache.spark" %% "spark-mllib" % "1.1.0"
现在我想写一个代码,它将使用spark和mongo计算数据的线性回归。但我不知道如何从mongo查询mongo。
这是我的简单类,不包含mongo部分。
import com.mongodb.DBObject
import com.mongodb.casbah.Imports._
import com.mongodb.casbah.commons.MongoDBObject
import com.mongodb.casbah.commons.ValidBSONType.BasicDBObject
import com.mongodb.util.JSON
import play.Play
import play.Logger
import play.api.libs.json.{JsValue, Json}
import scala.collection.JavaConversions.{collectionAsScalaIterable => asScala}
import play.Logger
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.hadoop.conf.Configuration
def apply(customerId: String)= {
val data = List((1416668402352, 10),
(1415684102290, 20),
(1415684402210, 30),
(1415684702188, 15),
(1415684702780, 25),
(1415685001845, 40),
(1415685301846, 100),
(1415685602110, 35),
(1415685603483, 50),
(1416668101756, 29),
(1415685901549, 95),
(1415686201903, 18),
(1415686502076, 24),
(1415686502765, 90),
(1415686801514, 32))
val numIterations = 20
// val model = LinearRegressionWithSGD.train(list.toArray, numIterations)
val config = new Configuration()
}
这里我给出了名为'activity'的mongo集合中的数据。 我想从活动集合中获取数据并计算它的线性回归。
如何从scala + play + spark查询到mongo
答案 0 :(得分:1)
我不确定我是否理解这个问题,但是为了集成mongo和scala,有一个reactivemongo项目(我们在Play + Scala项目中使用它)
它是非阻塞的,你模仿了mongoDB函数。
import reactivemongo.api._
import scala.concurrent.ExecutionContext.Implicits.global
// gets an instance of the driver
// (creates an actor system)
val driver = new MongoDriver
val connection = driver.connection(List("localhost"))
// Gets a reference to the database "plugin"
val db = connection("plugin")
// Gets a reference to the collection "acoll"
// By default, you get a BSONCollection.
val collection = db("acoll")
val values: Enumerator = collection.find(Json.obj()).cursor.enumerate()
它适用于枚举器,但如果需要,可以将其降级为同步调用,但我不建议
答案 1 :(得分:0)
如果你正在使用游戏而你想要一个ORM工具,你可以试试Salat + salat-play-plugin Play-salat
我正在使用Play 2.4,但它现在是2.5 +,而这个插件是用2.3编写的,你可能需要弄清楚如何使它适用于你的项目。但它适用于2.4,你已经得到了我的承诺。
我不太确定你是否需要通过scala + play + spark查询mongo,如果你的意思是通过spark查询mongo,你可以使用mongo connector来做到这一点,这很简单。如果你的意思是你需要在游戏中通过API调用/查询spark,我之前没有这样做,对不起。