ole*_*sii 3 scala cassandra apache-spark rdd
在我的测试环境中,我有1个Cassandra节点和3个Spark节点.我想迭代一个大约有200k行的大表,每个大约需要20-50KB.
CREATE TABLE foo (
uid timeuuid,
events blob,
PRIMARY KEY ((uid))
)
Run Code Online (Sandbox Code Playgroud)
这是在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()
Run Code Online (Sandbox Code Playgroud)
Cassandra 2.0.9,Spark:1.2.1,Spark-cassandra-connector-1.2.0-alpha2
我试图只运行collect,没有count- 在这种情况下它只是快速失败NoHostAvailableException.
问题:迭代大表读取和一次处理小批量行的正确方法是什么?
Cassandra Spark Connector中有2个设置来调整块大小(将它们放在SparkConf对象中):
此外,您不应该collect在示例中使用该操作,因为它将获取驱动程序应用程序内存中的所有行,并可能引发内存不足异常.collect只有在确定它会产生少量行时才能使用该操作.该count行为是不同的,它仅产生整数.所以我建议你像你一样从Cassandra加载你的数据,处理它,然后存储结果(用Cassandra,HDFS,等等).
| 归档时间: |
|
| 查看次数: |
3005 次 |
| 最近记录: |