Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Phantom Scala DSL在Cassandra中创建模式_Scala_Phantom Dsl - Fatal编程技术网

使用Phantom Scala DSL在Cassandra中创建模式

使用Phantom Scala DSL在Cassandra中创建模式,scala,phantom-dsl,Scala,Phantom Dsl,我已经写了这个代码 case class User(id: Int, gender: String, age: Int, occupation: String, zipCode: String) object Defaults { val hosts = Seq("172.17.0.9") val Connector = ContactPoints(hosts).keySpace("Movies") } class MyDatabase(val keyspace: KeySpaceD

我已经写了这个代码

case class User(id: Int, gender: String, age: Int, occupation: String, zipCode: String)

object Defaults {
  val hosts = Seq("172.17.0.9")
  val Connector = ContactPoints(hosts).keySpace("Movies")
}

class MyDatabase(val keyspace: KeySpaceDef) extends com.websudos.phantom.db.DatabaseImpl(keyspace) {
  object users extends Users with keyspace.Connector
}

object MyDatabase extends MyDatabase(Defaults.Connector)
class Users extends CassandraTable[Users, User] {
  object id extends IntColumn(this) with PartitionKey[Int]
  object age extends IntColumn(this) with Index[Int]
  object gender extends StringColumn(this) with Index[String]
  object occupation extends StringColumn(this) with Index[String]
  object zipCode extends StringColumn(this) with Index[String]

  def fromRow(row: Row) : User = {
    User(
      row(id),
      row(gender),
      row(age),
      row(occupation),
      row(zipCode)
    )
  }
}

object Users extends Users with RootConnector {
  def store(user: User) : Future[ResultSet] = {
    insert
      .value(_.id, user.id)
      .value(_.gender, user.gender)
      .value(_.age, user.age)
      .value(_.occupation, user.occupation)
      .value(_.zipCode, user.zipCode)
      .consistencyLevel_=(ConsistencyLevel.ALL)
      .future()
  }

  def getById(id: Int) : Future[Option[User]] = {
    select.where(_.id eqs id).one()
  }
}
但是当我编译这个时,我得到了一个错误

Object creation impossible, since member session: Session in 
com.websudos.phantom.connectors.RootConnector is not defined; member space: 
KeySpace in com.websudos.phantom.connectors.RootConnector is not defined.
我还看到了其他错误

[error] /Users/U/MyProjects/src/main/scala-2.11/com/abhi/MovieLensDataPreperation.scala:180: com.websudos.phantom.dsl.Row does not take parameters
[error]       row(id),
[error]          ^
[error] /Users/U/MyProjects/src/main/scala-2.11/com/abhi/MovieLensDataPreperation.scala:181: com.websudos.phantom.dsl.Row does not take parameters
[error]       row(gender),
[error]          ^
[error] /Users/U/MyProjects/src/main/scala-2.11/com/abhi/MovieLensDataPreperation.scala:182: com.websudos.phantom.dsl.Row does not take parameters
[error]       row(age),
[error]          ^
[error] /Users/U/MyProjects/src/main/scala-2.11/com/abhi/MovieLensDataPreperation.scala:183: com.websudos.phantom.dsl.Row does not take parameters
[error]       row(occupation),
[error]          ^
[error] /Users/U/MyProjects/src/main/scala-2.11/com/abhi/MovieLensDataPreperation.scala:184: com.websudos.phantom.dsl.Row does not take parameters
[error]       row(zipCode)
[error]          ^
[error] 5 errors found
[error] (compile:compileIncremental) Compilation failed

因为您已经将id、性别、年龄等定义为列,所以应该像这样从行中提取值:

def fromRow(row: Row) : User = {
  User(
    id(row),
    gender(row),
    age(row),
    occupation(row),
    zipCode(row)
  )
}

我认为您应该再次阅读我的教程,您没有遵循DSL的结构,也没有提供您应该提供的会话。您也没有使用真正有用的
数据库
实现。小事情,但经历这些会帮助你跟上进度。你的
Users
对象应该是一个名为
ConcreteUsers
的类,这就是你的
Users
字段在
MyDatabase
下应该扩展的,否则你将没有任何方法。谢谢弗拉维安。我根据这里的代码修改了我的实现,现在好多了。然而,我还有另一个障碍。我也回答了这个问题。另外,请阅读我对Cassandra索引的介绍:。使用如此多的
索引
es对性能来说真的非常糟糕。