我正在使用带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。 感谢。
答案 0 :(得分:4)
目前,从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)
答案 1 :(得分:4)
在cassandra-spark-connector 1.2中,您可以通过以下方式获得TTL和写入时间:
sc.cassandraTable(...).select("column1", WriteTime("column2"), TTL("column3"))
答案 2 :(得分:3)