我用:
-
cassandra 2.1.12 - 3个节点
-
spark 1.6 - 3个节点
-
spark cassandra连接器1.6
我在Cassandra中使用令牌(不是vnodes) .
我正在编写一个简单的工作,从Cassandra表读取数据,并显示其计数表有大约7000万行,它需要15分钟 .
当我正在读取数据并检查RDD的分区数是大约21000这个太大了 . 如何控制这个数字?
我试过了 splitCount
, split.size.in.mbs
但它们显示了相同数量的分区 .
有什么建议?
import org.apache.spark.{SparkContext, SparkConf}
import com.datastax.spark.connector._
import org.apache.spark.sql.cassandra.CassandraSQLContext
import org.apache.spark.sql.cassandra._
import org.apache.spark.sql
import java.sql.DriverManager
import java.sql.Connection
object Hi {
def main(args: Array[String])
{
val conf = new SparkConf(true).set("spark.cassandra.connection.host", "172.16.4.196").set("spark.cassandra.input.split.size_in_mb","64")
val sc = new SparkContext(conf)
val rdd = sc.cassandraTable("cw","usedcareventsbydatecookienew")
println("hello world" + rdd.partitions)
println("hello world" + rdd.count)
}
}
这是我的参考代码 . 我现在运行nodetool compact我能够控制分区的数量但是整个过程花费了将近6分钟,这是我认为太高了任何改进的建议
2 回答
你在寻找spark.cassandra.input.split.size吗?
当我在我的cassandra表上运行compact命令时,我的问题就解决了,现在我可以使用spark.cassandra.input.split.size参数控制它了