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はハッシュ値なので当たり前。。。
bannerAds