2016-11-24 52 views
1

我有以下代码Apache Spark SQL从Cassandra中获取数十亿行数据?

我调用火花壳如下

./spark-shell --conf spark.cassandra.connection.host=170.99.99.134 --executor-memory 15G --executor-cores 12 --conf spark.cassandra.input.split.size_in_mb=67108864 

代码

scala> val df = spark.sql("SELECT test from hello") // Billion rows in hello and test column is 1KB 

df: org.apache.spark.sql.DataFrame = [test: binary] 

scala> df.count 

[Stage 0:> (0 + 2)/13] // I dont know what these numbers mean precisely. 

如果我调用火花壳如下

./spark-shell --conf spark.cassandra.connection.host=170.99.99.134 

代码

val df = spark.sql("SELECT test from hello") // This has about billion rows 

scala> df.count 


[Stage 0:=> (686 + 2)/24686] // What are these numbers precisely? 

这两个版本都不起作用Spark永远在运行,我一直在等待超过15分钟而没有响应。关于什么可能是错误的以及如何解决这个问题的任何想法?

我使用星火2.0.2 和火花卡桑德拉 - connector_2.11-2.0.0-M3.jar

回答

2

Dataset.count是缓慢的,因为它时,它涉及到外部数据源是不是很聪明。它改写查询作为(这是好事):

SELECT COUNT(1) FROM table 

但不是推COUNT下它只是执行:

SELECT 1 FROM table 

对源(它会获取一个十亿的人在你的情况)和然后在本地聚合以获得最终结果。你看到的数字是任务计数器。

上有CassandraRDD一个优化cassandraCount操作:

sc.cassandraTable(keyspace, table).cassandraCount 

更多关于服务器侧操作可以在the documentation找到。

相关问题