如何统计"行"在Cassandra的列族更有效地使用python驱动程序? 我使用以下代码:
from cassandra.cluster import Cluster
from sys import stdout
servers = ['server1', 'server2']
cluster = Cluster(servers)
session = cluster.connect()
result = session.execute('select * from ks1.t1')
count = 0
for i in result:
count += 1
print count
答案 0 :(得分:1)
要在Python中实现这一目标,为什么不能实现以下目标:
from cassandra.cluster import Cluster
servers = ['server1', 'server2']
cluster = Cluster(servers)
session = cluster.connect()
result = session.execute('select count(*) from ks1.t1')
count = 0
for row in result: # will only be 1 row
count += row.count
print(count)
答案 1 :(得分:0)
计算排的可怕方式。基本上你正在进行全表扫描。
要计算分布式系统中的确切行数很难。
您可以使用 nodetool tablestats/cfstats
估算分区数(分区==行,如果您的表中没有群集列)强>
如果您确实需要精确计算行数,请使用共存的Spark安装在本地获取Spark内存中的所有数据,然后使用Spark计算它们。通过这种方式,计数将被分配,而不是压倒协调员。
示例scala代码:
import com.datastax.spark.connector._
sc.cassandraTable("keyspace", "table_name").count()
答案 2 :(得分:0)
Brian Hess独自站立'cassandra-count'。
用于计算Cassandra表中记录数的简单程序。通过使用numSplits参数拆分令牌范围,您可以减少每个查询的计数量并减少超时的可能性。
确实,Spark非常适合这种操作,但是 该程序的目标是成为一个不需要的简单实用程序 火花。