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
Scala Spark:如何从Cassandra中读取表块_Scala_Cassandra_Apache Spark - Fatal编程技术网

Scala Spark:如何从Cassandra中读取表块

Scala Spark:如何从Cassandra中读取表块,scala,cassandra,apache-spark,Scala,Cassandra,Apache Spark,我有一张垂直生长的大桌子。我希望以小批量读取行,以便可以处理每个行并保存结果 表定义 CREATE TABLE foo ( uid timeuuid, events blob, PRIMARY KEY ((uid)) ) 代码尝试1-使用CassandraSQLContext 最后一行抛出 主线程java.lang.RuntimeException中出现异常:[1.79]失败: ``应为,但找到标识符ea620 从foo.bar中选择事件,其中tokenuid> 令牌131EA620-

我有一张垂直生长的大桌子。我希望以小批量读取行,以便可以处理每个行并保存结果

表定义

CREATE TABLE foo ( 
uid timeuuid, 
events blob, 
PRIMARY KEY ((uid)) 
)
代码尝试1-使用CassandraSQLContext 最后一行抛出

主线程java.lang.RuntimeException中出现异常:[1.79]失败: ``应为,但找到标识符ea620

从foo.bar中选择事件,其中tokenuid> 令牌131EA620-2e4e-11e4-a2fc-8d5aad979e84限制10 ^ 在scala.sys.package$.errorpackage.scala:27 位于org.apache.spark.sql.catalyst.AbstractSparkSQLParser.applySparkSQLParser.scala:33 位于org.apache.spark.sql.SQLContext$$anonfun$1.applySQLContext.scala:79 位于org.apache.spark.sql.SQLContext$$anonfun$1.applySQLContext.scala:79

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

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

org.apache.spark.sparkeexception:由于阶段失败,作业中止: 阶段1.0中的任务0失败1次,最近一次失败:丢失任务0.0 在阶段1.0 TID 1中,localhost:java.io.IOException:Exception 准备SELECT uid,来自foo.bar的事件,其中 令牌UID>?和tokenuid$lastUUID ALLOW 筛选:第1行:118在字符“$”处没有可行的备选方案


如何使用where令牌。。。spark和Cassandra中的查询?

我将使用DataStax Cassandra Java驱动程序。与CassandraSQLContext类似,您可以选择如下块:

val query = QueryBuilder.select("events")
  .where(gt(token("uid"),token(lastUUID))
  .limit(10)
val rows = session.execute(query).all()

如果要异步查询,会话还具有executeAsync,它返回RichListenableFuture,可通过添加回调由scala Future包装。

不确定到底是什么导致了错误,但spark查询应使用SQL语法而不是CQL,因为您使用的是CassandraSQLContext,可能需要在QuoTeStok中包装UUID必须不是SQL函数,考虑切换到标准DATASAX连接器,而不是SQL CONTERCTCQL查询非常有限,我只使用它来加载必要的数据,然后只使用相同的查询作为正常的RDDDO,但去掉Soad的部分并在SCAPK中执行范围,您可以执行的查询类型取决于您的聚类列在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)
val query = QueryBuilder.select("events")
  .where(gt(token("uid"),token(lastUUID))
  .limit(10)
val rows = session.execute(query).all()