【问题标题】:Python connection to AWS Athena throwing error与 AWS Athena 的 Python 连接引发错误
【发布时间】:2017-09-07 08:09:47
【问题描述】:

我正在尝试通过 Python 2.7.13 运行 AWS Athena SQL 查询并遵循以下两个选项,但在这两种情况下都出现 “python.exe 停止工作” 错误。 我是 python 新手,非常感谢任何帮助。

选项 1:尝试使用 Pyathenajdbc

>>> from pyathenajdbc import connect

>>> import pandas as pd

>>> conn = connect(access_key='<acess_key>',
               secret_key='<secret_key>',
               s3_staging_dir='s3://Test/',
               region_name='<region_name>',
               jvm_path='C:\\Program Files (x86)\\Java\\jre6\\bin\\client\\jvm.dll')

>>> df = pd.read_sql("select * from test.test45 LIMIT 1", conn)

选项 2:尝试使用 jaydebeapi 仍然是同样的错误

使用 Microsoft Visual Studio 调试 Python 时出现错误消息

python.exe 中 0x00170000 处未处理的异常:0xC0000005:访问冲突。

【问题讨论】:

  • 这是类似的线程,也许它与您的导入有关stackoverflow.com/questions/40178251/…
  • 或者您对 pandas 版本有疑问? Pandas pip install PyAthenaJDBC[Pandas] >=0.19.0 (ref github.com/laughingman7743/PyAthenaJDBC)
  • 我尝试了你的代码,它不使用 Pandas,但仍然出现同样的错误。关于清理导入的评论,我安装了“Pyflakes”并试图弄清楚如何在代码中实现清理。
  • 也刚刚在错误截图中注意到应用程序版本是 0.0.0.0 而不是 2.7.13 不确定这是否会导致任何错误。但是 cmd 提示符中的 Python -V 返回版本为 2.7.13。有什么想法吗?
  • 如果您是 Python 新手,您不应该使用 Python 2,除非您绝对必须这样做。

标签: python windows python-2.7 amazon-web-services amazon-athena


【解决方案1】:

JayDeBeApi 太复杂,无法使用 Athena JDBC 进行调整,PyAthenajdbc 更易于使用。 这就是我使用它的方式,它就像一个魅力!

声明

import os
import configparser
import pyathenajdbc


# Get aws credentials 
aws_config_file = '~/.aws/config'

Config = configparser.ConfigParser()
Config.read(os.path.expanduser(aws_config_file))

access_key_id = Config['default']['aws_access_key_id']
secret_key_id = Config['default']['aws_secret_access_key']

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
log_path = BASE_DIR + "/lib/static/queries.log"

class PyAthenaLoader():    
    def connecti(self):
        self.conn = pyathenajdbc.connect(
            s3_staging_dir="s3://athena",
            access_key=access_key_id,
            secret_key=secret_key_id,
            region_name="us-east-1",
            log_path=log_path,

        )

    def databases(self):
        dbs = self.query("show databases;")
        return dbs

    def tables(self, database):
        tables = self.query("show tables in {0};".format(database))
        return tables


    def query(self, req):
        self.connecti()

        try:
            with self.conn.cursor() as cursor:
                cursor.execute(req)
                res = cursor.fetchall()
        except Exception as X:
            return X
        finally:
            self.conn.close()
        return res

用法

athena = PyAthenaLoader()
res = athena.query('SELECT * from shadow.sales;')
print(res)

【讨论】:

  • - 非常感谢您的输入,但是即使在此代码中,我也会收到“python.exe 已停止工作”错误。在运行脚本之前不确定我是否缺少任何参数或系统变量?
  • 我明白了。我正在使用 Gnu/Linux 操作系统,所以我从未遇到过该错误。但是,我已经做了一些研究,显然这个问题可能与各种原因有关。您能否发布错误的屏幕截图,也许其他人可以帮助您?
  • 按要求在问题中添加了错误截图
  • jpype._jexception.RuntimeExceptionPyRaisable: java.lang.RuntimeException: com.amazonaws.athena.jdbc.AthenaDriver 类未找到
  • PyAthenaJDBC 的创建者推荐使用他基于新发布的 boto SDK 的其他模块:github.com/laughingman7743/PyAthena
猜你喜欢
  • 1970-01-01
  • 2017-05-28
  • 2021-07-28
  • 2017-08-17
  • 2019-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-09
相关资源
最近更新 更多