Кодирование данных импалы при чтении из pandas.read_sql - PullRequest
0 голосов
/ 11 марта 2019

Когда я читаю данные импалы с использованием библиотеки pyhive и pandas.read_sql, я получаю сообщение об ошибке UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe2 in position 3071: unexpected end of data

Причиной этой ошибки может быть то, что данные могут быть повреждены там.

Как я могу изменить его на другую кодировку, чтобы я мог получить данные в кадре данных?

1 Ответ

0 голосов
/ 10 апреля 2019

Обходной путь заключается в следующем:

1) мы извлекаем порцию данных порциями через курсор Pyhive.

2) Предварительная обработка: кодирование / декодирование.

3) Присоединениедо окончательного кадра данных.


# cursor to the database.
cursor = hive.Connection(host=HOST, port=PORT, username=USERNAME).cursor()

# execute the query on the database side.
cursor.execute("SELECT id, message FROM table")

# result dataframe, empty for now.
df = pd.DataFrame(columns=['id', 'message'])

while True:
    # fetch 10k rows (as tuples).
    rows = cursor.fetchmany(10000)

    # if no more rows to retrieve, we stop.
    if not rows:
        break

    # Preprocessing: do encoding/decoding here
    rows = [(id, message.decode('utf-8', 'ignore')) for id, message in rows]

    # put result in a temporary dataframe
    df_tmp = pd.DataFrame(rows, columns=['id', 'message'])

    # merge the temporary dataframe to the original df
    df = pd.concat([df, df_tmp])

df = ...

...