java 读取 cassandra 大表_Spark:如何从Cassandra中读取表格的大块

我有一张垂直生长的大 table . 我想小批量读取行,以便我可以处理每个行并保存结果 .

表定义

CREATE TABLE foo (

uid timeuuid,

events blob,

PRIMARY KEY ((uid))

)

代码尝试1 - 使用CassandraSQLContext

// Step 1. Get uuid of the last row in a batch

val max = 10

val rdd = sc.cassandraTable("foo", "bar")

var cassandraRows = rdd.take(max)

var lastUUID = cassandraRows.last.getUUID("uid");

// lastUUID = 131ea620-2e4e-11e4-a2fc-8d5aad979e84

// Step 2. Use last row as a pointer to the start of the next batch

val cc = new CassandraSQLContext(sc)

val cql = s"SELECT events from foo.bar where token(uid) > token($lastUUID) limit $max"

// which is at runtime

// SELECT events from foo.bar WHERE

// token(uid) > token(131ea620-2e4e-11e4-a2fc-8d5aad979e84) limit 10

cc.sql(cql).collect()

最后一行抛出

线程“main”中的异常java.lang.RuntimeException:[1.79]失败:``)''预期但标识符ea620从foo.bar找到SELECT事件,其中token(uid)> token(131ea620-2e4e-11e4-a2fc- 8d5aad979e84)在org.apache.spark.sql的org.apache.spark.sql.catalyst.AbstractSparkSQLParser.apply(SparkSQLParser.scala:33)的scala.sys.package $ .error(package.scala:27)中限制10 ^ .SQLContext $$ anonfun $ 1.apply(SQLContext.scala:79)at org.apache.spark.sql.SQLContext $$ anonfun $ 1.apply(SQLContext.scala:79)

但是如果我在cqlsh中运行我的cql,它会返回正确的10条记录 .

代码尝试2 - 使用DataStax Cassandra连接器

// Step 1. Get uuid of the last row in a batch

val max = 10

val rdd = sc.cassandraTable("foo", "bar")

var cassandraRows = rdd.take(max)

var lastUUID = cassandraRows.last.getUUID("uid");

// lastUUID = 131ea620-2e4e-11e4-a2fc-8d5aad979e84

// Step 2. Execute query

rdd.where(s"token(uid) > token($lastUUID)").take(max)

这引发了

org.apache.spark.SparkException:作业因阶段失败而中止:阶段1.0中的任务0失败1次,最近失败:阶段1.0中失去的任务0.0(TID 1,localhost):java.io.IOException:异常期间编写SELECT“uid”,“events”FROM“foo” . “bar”WHERE token(“uid”)>? AND令牌(“uid”)<=? AND uid> $ lastUUID ALLOW FILTERING:第1行:118在字符'$'上没有可行的选择

How to use where token(...) queries in spark and Cassandra?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值