Python2 .7 UnicodeEncodeError: код ascii c не может кодировать символы в значениях фрейма данных - PullRequest
0 голосов
/ 05 мая 2020

С помощью Pyspark я попытался создать функцию, которая будет пропорционально возвращать содержимое фрейма данных.

def format(dataframe,take=100):
    header = "\t".join(dataframe.columns)
    spacer = "\t".join(["--" for c in dataframe.columns])
    data = ["\t".join([unicode(a.asDict()[c]) for c in dataframe.columns]) for a in dataframe.take(take)]
    return "\n".join([header, spacer] + data)

Но в некоторых значениях фрейма данных есть символы, отличные от ascii, которые бросают UnicodeEncodeError: код ascii c не может кодировать символы в позиции 4-5: порядковый номер не в диапазоне (128) Исключение

Я пытался добавить функцию кодирования («utf8») в фрейм данных, но не работает,

Чтобы более прояснить проблему, вот пример:

df= spark.createDataFrame([
            [1, "value_1"],
            [2, "value_1"],
            [3, "value_2"],
            [4, "valué_2"]
        ], ['key', 'value']
        )

Когда я вызываю свою функцию, я получаю неверную последнюю строку

print show_function(df)
+---+--------+
|key|   value|
+---+--------+
|  1| value_1|
|  2| value_1|
|  3| value_2|
|  4|valué_2|
+---+--------+

Любая помощь, пожалуйста, спасибо

1 Ответ

0 голосов
/ 05 мая 2020

После некоторых исследований в других сообщениях я нашел решение, я добавил функции кодирования (Latin-1) декодирования ("UTF8").

data = ["\t".join([unicode(a.asDict()[c]).encode('latin-1').decode("utf8") for c in dataframe.columns]) for a in dataframe.take(take)]

Теперь функция работает нормально и правильно влияет результат фрейма данных в строку, которая будет отображаться после

...