cassandra行的写作时间在火花

时间:2015-02-13 16:31:48

标签: apache-spark cassandra-2.0

我正在使用带cassandra的spark,我想从我的cassandra表中选择我的行的writeTime。这是我的要求:

   val lines = sc.cassandraTable[(String, String, String, Long)](CASSANDRA_SCHEMA, table).select("a", "b", "c", "writeTime(d)").count()

但显示此错误:

java.io.IOException: Column channal not found in table test.mytable

我也试过了这个请求

   val lines = sc.cassandraTable[(String, String, String, Long)](CASSANDRA_SCHEMA, table).select("a", "b", "c", WRITETIME("d")").count()

但显示此错误:

<console>:25: error: not found: value WRITETIME

请问如何获得我的行的writeTime。 感谢。

3 个答案:

答案 0 :(得分:4)

编辑:已在1.2版本的连接器

中修复此问题

目前,从Cassandra读取时,Connector不支持传递CQL函数。我已经注意到这一点,并将启动实现此功能的票证。

https://datastax-oss.atlassian.net/browse/SPARKC-55

对于解决方法,您始终可以在操作中使用直接连接器,例如

import com.datastax.spark.connector.cql.CassandraConnector

val cc = CassandraConnector(sc.getConf)
val select = s"SELECT WRITETIME(userId) FROM cctest.users where userid=?"
val ids = sc.parallelize(1 to 10)
ids.flatMap(id =>
      cc.withSessionDo(session =>
        session.execute(select, id.toInt: java.lang.Integer)

代码修改自 Filter from Cassandra table by RDD values

答案 1 :(得分:4)

在cassandra-spark-connector 1.2中,您可以通过以下方式获得TTL和写入时间:

sc.cassandraTable(...).select("column1", WriteTime("column2"), TTL("column3"))

答案 2 :(得分:3)

查看this票。

有关用法,请查看集成测试here