3

我有一个查询,它通过扫描 90GB 数据在 43 秒内(直接)在 Athena 上运行。然后我使用 pyathena 运行相同的查询(我在 EMR 上的 jupyter notebook 中使用它),它只是没有完成运行(并且永远不会返回任何结果)。我已经针对较小的查询(通过设置限制 100)对其进行了测试,并且它可以工作。为什么 pyathena 比直接在 Athena 上运行查询要慢得多?

4

1 回答 1

0

我猜你正在使用 fetchall api。

fetchall 方法使用 fetchone 直到没有更多结果,这就是为什么它需要这么长时间。

def fetchall(self):
    rows = []
    while True:
        row = self.fetchone()
        if row:
            rows.append(row)
        else:
            break
    return rows

您可以使用 cursor.output_location 获取 Athena 创建的 csv 结果文件以读取结果(例如使用 boto3):

bucket, key = cursor.output_location.strip('s3://').split('/', 1)
session = boto3.session.Session(aws_access_key_id=YOUR_AWS_KEY, aws_secret_access_key=YOUR_AWS_SECRET, region_name=YOUR_REGION_NAME)

result = session.resource('s3').Object(bucket, key)

此外,在 pyathena 的下一个版本中,您将能够使用从 s3 读取文件的 as_pandas api 将结果读取到 pandas 数据帧。

于 2018-11-15T16:38:07.100 回答