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

时间:2016-04-21 07:22:36

标签: apache-spark cassandra spark-cassandra-connector apache-spark-1.6

我用:

  1. cassandra 2.1.12 - 3个节点
  2. spark 1.6 - 3个节点
  3. spark cassandra connector 1.6
  4. 我在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 个答案:

答案 0 :(得分:4)

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

  

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

答案 1 :(得分:0)

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