pivepark Hive Context - чтение таблицы с кодировкой UTF-8 - PullRequest
0 голосов
/ 29 августа 2018

У меня есть таблица в улье, и я читаю эту таблицу в pyspark df_sprk_df

from pyspark import SparkContext
from pysaprk.sql import HiveContext
sc = SparkContext()
hive_context = HiveContext(sc)
df_sprk_df = hive_context.sql('select * from databasename.tablename')
df_pandas_df = df_sprk_df.toPandas()
df_pandas_df = df_pandas_df.astype('str')

но когда я пытаюсь преобразовать df_pandas_df в astype of str. но я получаю ошибку как

UnicodeEnCodeError: кодек 'ascii' не может кодировать символ u '\ u20ac' в позиции

Даже я пытался преобразовать столбец в строку один за другим как

for cols in df_pandas_df.columns:
    df_pandas_df[cols] = df_pandas_df[cols].str.encode('utf-8')

но не повезло, так что в основном, как я могу импортировать таблицу кустов в dataframe в кодировке utf-8

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

Так что этот обходной путь помог решить эту проблему, изменив кодировку по умолчанию для сеанса

import sys
reload(sys)
sys.setdefaultencoding('UTF-8')

, а затем

df_pandas_df = df_pandas_df.astype(str)

преобразует весь фрейм данных в строку df.

0 голосов
/ 29 августа 2018

Вместо непосредственного приведения его к строке попробуйте определить типы панд DataFrame, используя следующую инструкцию:

df_pandas_df .apply(lambda x: pd.lib.infer_dtype(x.values))

UPD: попробуйте выполнить сопоставление без .str вызова.

Может быть, что-то вроде ниже:

for cols in df_pandas_df.columns:
    df_pandas_df[cols] = df_pandas_df[cols].apply(lambda x: unicode(x, errors='ignore'))
...