例如我们在docs.datastax.com提到:
table1 = sqlContext.read.format("org.apache.spark.sql.cassandra").options(table="kv", keyspace="ks").load()
它是我所知道的唯一方式,但是我想说我只想从这个表中加载最后一百万个条目。我不想每次都在内存中加载整个表,特别是如果这个表有超过1000万个条目。
谢谢!
答案 0 :(得分:3)
虽然您无法更快地加载数据。您可以加载部分数据或提前终止。 Spark DataFrames利用催化剂来优化它的底层查询计划,使其能够采取一些捷径。
例如,调用limit
将允许Spark跳过从基础DataSource读取一些部分。这些将通过取消执行任务来限制从Cassandra读取的数据量。
底层数据源可以使用调用过滤器或添加过滤器来帮助限制从Cassandra实际提取的信息量。可以推送的内容有一些限制,但这些都在文档中详细说明。
注意所有这一切都是通过在调用DataSource后对其进行进一步的api调用来完成的。例如
val df = sqlContext
.read
.format("org.apache.spark.sql.cassandra")
.options(table="kv", keyspace="ks")
.load()
df.show(10) // Will compute only enough tasks to get 10 records and no more
df.filter(clusteringKey > 5).show() //Will pass down the clustering predicate to C*