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

Apache spark 从Cassandra读取数据时如何控制分区数?,apache-spark,cassandra,spark-cassandra-connector,apache-spark-1.6,Apache Spark,Cassandra,Spark Cassandra Connector,Apache Spark 1.6,我使用: cassandra 2.1.12-3个节点 spark 1.6-3节点 火花卡桑德拉连接器1.6 我在Cassandra中使用代币(而不是vnodes) 我正在写一个简单的工作,从Cassandra表中读取数据并显示其计数表大约有7000万行,需要15分钟 当我读取数据并检查RDD的分区数是否在21000左右时,这太大了。如何控制这个数字 我尝试了splitCount,split.size.in.mbs但是它们显示了相同数量的分区 有什么建议吗 import org.apache.sp

我使用:

  • cassandra 2.1.12-3个节点
  • spark 1.6-3节点
  • 火花卡桑德拉连接器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分钟,我认为这太高了。有什么改进建议吗

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


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

    根据这个参数,我应该只有大约70个分区,但它显示了21000个分区,spark.cassandra.input.split.size_in_mb也有同样的功能