Spark + Cassandraのfilter, where句の使い方メモ
いまだクリアーになっていない点は
- >=, <= で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")
みたいにして、dailyデータは24回クエリーして、unionしてrepartitionしている。
- in, >=, <=でフィルタリングしていが、その場合、全なめして遅くて使えない。
SparkSQLの場合
全件とってカウント
val cc = new CassandraSQLContext(sc)
val df = cc.sql("select * from table")
df.show
df.count
しても、
where句でfilterしても
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
もpartitions数は同じになって謎
ここで、datetimeはpartition key
CassandraTableの場合
- sc.cassandraTable("select * from table datetime in (2016010500, ..., 2016010523)")などとして、rddをとって#partitions=1となって使えない。
- 0 -23で取得して、unionして、repartitionしてするなどして対応
なぞなぞ、勘違いメモ
- partition keyの不等号、range filtertokenを使うが当然、不等号は変な挙動になる。 tokenはハッシュ値なので当たり前。。。
Author And Source
この問題について(Spark + Cassandraのfilter, where句の使い方メモ), 我々は、より多くの情報をここで見つけました https://qiita.com/rikima/items/636612d942bbd0e2d617著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .