我遇到一个问题,从cassandra表中计算一个简单的行。我使用spark-cassandra-connector
从cassandra中获取数据:
scalaVersion := "2.11.11"
libraryDependencies += "org.apache.spark" % "spark-core_2.11" % "2.2.0"
libraryDependencies += "com.datastax.spark" % "spark-cassandra-connector_2.11" % "2.0.5"
libraryDependencies += "org.apache.spark" % "spark-sql_2.11" % "2.2.0"
使用此代码:
import org.apache.spark.{SparkConf, SparkContext}
import com.datastax.spark.connector._
import com.datastax.spark.connector.cql.CassandraConnectionFactory
object Init {
def main(args: Array[String]): Unit = {
val sparkConf = new SparkConf()
.set("spark.cassandra.connection.host", "host")
// .set("spark.cassandra.input.split.size_in_mb", "65000")
.setAppName("spark2Cassandra")
.setMaster("local[*]")
val sparkContext = new SparkContext(sparkConf)
val table = sparkContext.cassandraTable("keyspace", "table")
println(table.count())
}
}
当我运行此代码时,我得到大约2k个分区和40个并行任务,大约需要1个小时。 在这种情况下:1 billion for 5-6 mins只需5-6分钟。但为什么呢?
我应该怎样做才能减少时间?
不幸的是,这个Spark: PySpark + Cassandra query performance并没有就我的问题给出答案。我也尝试使用cassandraCount()但是需要大约一个小时