Ошибка подключения Python к AWS Athena

Я пытаюсь запустить SQL-запросы AWS Athena через Python 2.7.13 и следовал двум приведенным ниже параметрам, но в обоих случаях получаю ошибку "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, все та же ошибка

Скриншот сообщения об ошибке

Сообщение об ошибке при отладке Python с помощью Microsoft Visual Studio

Необработанное исключение по адресу 0x00170000 в python.exe: 0xC0000005: нарушение прав доступа.


person Rajeev    schedule 11.04.2017    source источник
comment
Вот похожий поток, возможно, он как-то связан с вашим импортом stackoverflow.com/questions/40178251/   -  person Tewfik Ghariani    schedule 26.04.2017
comment
или, может быть, у вас проблема с версией pandas? Pandas pip install PyAthenaJDBC[Pandas] ›=0.19.0 (ссылка github.com/laughingman7743/PyAthenaJDBC)   -  person Tewfik Ghariani    schedule 26.04.2017
comment
Я попытался с вашим кодом, который не использует Pandas, и все равно получил ту же ошибку. На ваш комментарий об очистке импорта я установил Pyflakes и попытался выяснить, как реализовать в коде очистку.   -  person Rajeev    schedule 26.04.2017
comment
Также только что заметил на снимке экрана с ошибкой, что версия приложения 0.0.0.0 вместо 2.7.13, не уверен, что это вызывает какую-либо ошибку. Однако Python -V в приглашении cmd возвращает версию 2.7.13. Есть мысли?   -  person Rajeev    schedule 26.04.2017
comment
Использовал Pyflakes для проверки импорта, и он не выявил никаких проблем.   -  person Rajeev    schedule 27.04.2017
comment
Простите меня, я честно не знаю, в чем причина проблемы. Проверьте эту ссылку, возможно, она может вам помочь =w7itprogeneral" rel="nofollow noreferrer">social.technet.microsoft.com/Forums/office/en-US/ Удачи ^^   -  person Tewfik Ghariani    schedule 27.04.2017
comment
ах да, и подумайте об изменении тегов потока. Я считаю, что это связано с python, windows, microsoft, BEX, DEP ... больше, чем с pyathenajdbc или aws :)   -  person Tewfik Ghariani    schedule 27.04.2017
comment
Если вы новичок в Python, вам не следует использовать Python 2, за исключением абсолютно необходимости.   -  person Wayne Werner    schedule 26.05.2017
comment
Как насчет удаления и переустановки python? Также попробуйте запустить код на другой машине? Мне просто интересно узнать, связано ли это с вашей конкретной машиной и установкой.   -  person Code-Apprentice    schedule 26.05.2017
comment
Возможно, вы захотите потратить время на настройку образа виртуальной машины, чтобы создать чистую среду для работы.   -  person Code-Apprentice    schedule 26.05.2017
comment
@WayneWerner мой код AWS написан на python 2.7, поэтому я должен пойти по этому пути   -  person Rajeev    schedule 26.05.2017
comment
@Code-Apprentice попытался переустановить Python и запустил мой код на машине моих коллег, но все равно получил ту же ошибку. Я пока не пробовал вариант с образом виртуальной машины.   -  person Rajeev    schedule 26.05.2017


Ответы (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)
person Tewfik Ghariani    schedule 12.04.2017
comment
- Большое спасибо за ваш вклад, однако я получаю, что python.exe перестал работать с ошибкой даже в этом коде. Не уверены, что я пропускаю какие-либо параметры или системные переменные перед запуском скрипта? - person Rajeev; 13.04.2017
comment
Я понимаю. Я использую ОС Gnu/Linux, поэтому никогда не сталкивался с этой ошибкой. Тем не менее, я провел некоторые исследования, и, по-видимому, эта проблема может быть связана с различными причинами. Не могли бы вы опубликовать скриншот ошибки, возможно, другие могут вам помочь? - person Tewfik Ghariani; 13.04.2017
comment
По запросу добавлен скриншот ошибки к вопросу - person Rajeev; 26.04.2017
comment
jpype._jexception.RuntimeExceptionPyRaisable: java.lang.RuntimeException: класс com.amazonaws.athena.jdbc.AthenaDriver не найден - person Jinesh John; 20.09.2017
comment
Создатель PyAthenaJDBC рекомендует использовать другой модуль, основанный на недавно выпущенном boto SDK: github.com/laughingman7743/PyAthena - person Tewfik Ghariani; 22.09.2017