我在cassandra集群中有很多数据,有2个节点机器和1个种子机器。我有一个火花大师和3个从属节点。每台机器都是8 GB的双核机器。因此,如果我的数据大约为2,00,000,并且当我在数据帧上执行rdd.count时,则需要花费大量时间,有时甚至会超时。
val tabledf = _sqlContext
.read
.format("org.apache.spark.sql.cassandra")
.options(Map( "table" -> "events", "keyspace" -> "sams"))
.load
tabledf.registerTempTable("tempdf");
val rdd = _sqlContext.sql("select * from tempdf");
val count = rdd.count.toInt
如何最大限度地减少这个计算时间? 我准备添加更多的工作机器,但它会有什么不同吗?
答案 0 :(得分:1)
最简单的解决方案是缓存输入DataFrame
_sqlContext.cacheTable("tempdf")
否则您必须传输所有数据以执行简单计数。