我目前正在使用此堆栈:
我有这个DStream [Ids],RDD计数大约6000-7000个元素。 id
是分区密钥。
val ids: DStream[Ids] = ...
ids.joinWithCassandraTable(keyspace, tableName, joinColumns = SomeColumns("id"))
随着tableName
越来越大,让我们说大约30k"行",查询需要更长时间,而且我无法保持在批量持续时间阈值之下。它的表现类似于使用大量IN
- 条款,我理解这是不可取的。
有更有效的方法吗?
答案:
在与Cassandra进行连接之前,请务必记住使用repartitionByCassandraReplica
对本地RDD进行重新分区,以确保每个分区仅针对本地Cassandra节点。在我的情况下,我还必须在加入本地RDD / DStream上增加分区,以便任务在工作人员之间均匀分布。
答案 0 :(得分:3)
是" id"你桌子上的分区键?如果没有,我认为它必须是,否则你可能正在进行表扫描,随着表变大,它会逐渐变慢。
为了使用此方法获得良好性能,我相信您需要对ids RDD使用repartitionByCassandraReplica()操作,以便连接是每个节点上的本地操作。
请参阅this。