【发布时间】:2018-07-27 11:13:07
【问题描述】:
用例:
我正在使用 Google BigTable 来存储这样的计数:
| rowkey | columnfamily |
| | col1 | col2 | col3 |
|----------|------|------|------|
| row1 | 1 | 2 | 3 |
| row2 | 2 | 4 | 8 |
| row3 | 3 | 3 | 3 |
我想读取给定行键范围内的所有行(在这种情况下假设所有行)并聚合每列的值。
一个简单的实现会查询行并在聚合计数时迭代行,如下所示:
from google.cloud.bigtable import Client
instance = Client(project='project').instance('my-instance')
table = instance.table('mytable')
col1_sum = 0
col2_sum = 0
col3_max = 0
table.read_rows()
row_data.consume_all()
for row in row_data.rows:
col1_sum += int.from_bytes(row['columnfamily']['col1'.encode('utf-8')][0].value(), byteorder='big')
col2_sum += int.from_bytes(row['columnfamily']['col2'.encode('utf-8')][0].value(), byteorder='big')
col3_value = int.from_bytes(row['columnfamily']['col3'.encode('utf-8')][0].value(), byteorder='big')
col3_max = col3_value if col3_value > col3_max else col3_max
问题:
有没有办法有效地将结果行加载到 pandas DataFrame 中并利用 pandas 性能进行聚合?
我想避免使用 for 循环来计算聚合,因为众所周知它效率非常低。
我知道Apache Arrow project 和它的python bindings,尽管 HBase 被提及为支持项目(Google BigTable 被宣传为与 HBase 非常相似)我似乎找不到使用它的方法对于我在这里描述的用例。
【问题讨论】:
标签: python pandas bigtable pyarrow