Python 如何有效地将GoogleBigtable中的行读取到数据帧中

Python 如何有效地将GoogleBigtable中的行读取到数据帧中,python,pandas,bigtable,pyarrow,Python,Pandas,Bigtable,Pyarrow,用例: 我使用Google BigTable存储计数,如下所示: | rowkey | columnfamily | | | col1 | col2 | col3 | |----------|------|------|------| | row1 | 1 | 2 | 3 | | row2 | 2 | 4 | 8 | | row3 | 3 | 3 | 3 | from google.

用例:

我使用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
我想读取给定行键范围内的所有行(在本例中,让我们假设所有行),并聚合每列的值

一个简单的实现将查询行,并在聚合计数的同时迭代行,如下所示:

|  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数据帧中加载生成的行,并利用pandas性能进行聚合

我希望避免使用for循环来计算聚合,因为众所周知,它非常低效


我知道,虽然HBase被称为支持项目(Google BigTable被宣传为与HBase非常相似),但我似乎找不到一种方法将其用于我在这里描述的用例。

我不相信云BigTable现有的pandas接口,但这将是一个很好的构建项目,与中的BigQuery界面类似。

您可能可以与一起使用。如果这不能在开箱即用的情况下实现,您也许可以从中获得如何执行集成的灵感


还有一个,您可以与之集成(感谢Wes McKinney的提示)。

在深入研究BigTable机制之后,python客户端似乎在调用
table.read_rows()
时执行gRPC
ReadRows
调用。该gRPC调用通过HTTP/2以键顺序返回行的流式响应(请参阅)

如果API每行返回数据,那么在我看来,使用该响应的唯一有用方法是基于行的。试图以列格式加载数据以避免在行上循环似乎没有什么用处