我用:
我在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分钟,我认为任何改进的建议都太高了
答案 0 :(得分:4)
您在寻找spark.cassandra.input.split.size吗?
<强> spark.cassandra.input.split.size 强> 默认值= 64.单个Spark分区中的近似行数。值越高,创建的Spark任务越少。过度增加值可能会限制并行度。
答案 1 :(得分:0)
当我在cassandra表上运行compact命令时,我的问题解决了,现在我可以使用spark.cassandra.input.split.size参数控制它了