首页 文章

从Cassandra读取数据时如何控制分区数?

提问于
浏览
2

我用:

  • cassandra 2.1.12 - 3个节点

  • spark 1.6 - 3个节点

  • spark cassandra连接器1.6

我在Cassandra中使用令牌(不是vnodes) .

我正在编写一个简单的工作,从Cassandra表读取数据,并显示其计数表有大约7000万行,它需要15分钟 .

当我正在读取数据并检查RDD的分区数是大约21000这个太大了 . 如何控制这个数字?

我试过了 splitCountsplit.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 回答

  • 4

    你在寻找spark.cassandra.input.split.size吗?

    spark.cassandra.input.split.size默认值= 64.单个Spark分区中的近似行数 . 值越高,创建的Spark任务越少 . 过度增加值可能会限制并行度 .

  • 0

    当我在我的cassandra表上运行compact命令时,我的问题就解决了,现在我可以使用spark.cassandra.input.split.size参数控制它了

相关问题