Spark + Cassandra中过滤器的使用示例笔记
目前尚未澄清的问题
-
- >=, <= でrange filterを効率的にできるかどうか?
-
- columnがpartition key, clustering keyで挙動が違うがその差異を完全に理解できてない
- さらに、cqlshでの場合と、sparkで処理させた場合の違い、spark上でのpartitionがどうなるかが完全理解できてない。
目前的解答是,
-
- datetime(e.g. 2016010501)をdate, hourで作って、partition keyにする。
- sparkで引くときは、
sc.CassandraTable("select * from table datetime = 2016010500")
就像这样,每天的数据进行了24次查询,然后进行了合并和重新分区处理。
- in, >=, <=でフィルタリングしていが、その場合、全なめして遅くて使えない。
如果是SparkSQL的情况下
将所有项目进行计数。
val cc = new CassandraSQLContext(sc)
val df = cc.sql("select * from table")
df.show
df.count
无论如何
即使在where子句中进行筛选也没有用
val cc = new CassandraSQLContext(sc)
val df = cc.sql("select * from table where datetime >= '2016-01-01 00:00:00' and datetime <= '2016-01-01 23:59:59'")
df.show
df.count
在这里,datetime是分区键,所以partitions数量变得相同,这是个谜。
对于 CassandraTable
-
- sc.cassandraTable(“select * from table datetime in (2016010500, …, 2016010523)”)などとして、rddをとって#partitions=1となって使えない。
- 0 -23で取得して、unionして、repartitionしてするなどして対応
谜语,误解备忘录
-
- partition keyの不等号、range filtertokenを使うが当然、不等号は変な挙動になる。
- tokenはハッシュ値なので当たり前。。。