【发布时间】:2015-04-27 20:40:32
【问题描述】:
在我的测试环境中,我有 1 个 Cassandra 节点和 3 个 Spark 节点。我想迭代显然有大约 200k 行的大表,每行大约需要 20-50KB。
CREATE TABLE foo (
uid timeuuid,
events blob,
PRIMARY KEY ((uid))
)
这是在 spark 集群上执行的 scala 代码
val rdd = sc.cassandraTable("test", "foo")
// This pulls records in memory, taking ~6.3GB
var count = rdd.select("events").count()
// Fails nearly immediately with
// NoHostAvailableException: All host(s) tried for query failed [...]
var events = rdd.select("events").collect()
Cassandra 2.0.9,Spark:1.2.1,Spark-cassandra-connector-1.2.0-alpha2
我尝试只运行collect,而不运行count - 在这种情况下,它只是使用NoHostAvailableException 快速失败。
问题:一次迭代大表读取和处理小批量行的正确方法是什么?
【问题讨论】:
-
您可以尝试在计数之前增加分区数,使用 repartition
标签: scala cassandra apache-spark rdd