El diccionario de Python contiene valores codificados

Tengo un dataframe de pandas oParameterData que he creado en Hadoop utilizando la conexión ODBC de Hive. Lo estoy usando para rellenar un diccionario de Python llamado oParameter

 import pyodbc import pandas oConnexionString = 'Driver={ClouderaHive};[...]' oConnexion = pyodbc.connect(oConnexionString, autocommit=True) oConnexion.setencoding(encoding='utf-8') oQueryParameter = "select * from my_db.my_table;" oParameterData = pandas.read_sql(oQueryParameter, oConnexion) oCursor = oConnexion.cursor() for oRow in oParameterData.index: oParameter = {} oParameter['pTableName'] = oParameterData.loc[oRow,'game'] oParameter['pDataPartition'] = oParameterData.loc[oRow,'partition'] oParameter['pDataLocation'] = oParameterData.loc[oRow,'data_path'] oParameter['pAvroSchemaURL'] = oParameterData.loc[oRow,'schema_path'] 

Cuando imprimo todo el diccionario tengo lo siguiente:

 >>> print(oParameter) >>> {'pDataLocation': '/\x00d\x00a\x00t\x00a\x00/\x00d\x00a\x00t\x00a\x00l\x00a\x00k\x00e\x00/\x00t\x00m\x00p\x00/\x00k\x00a\x00f\x00k\x00a\x00d\x00u\x00m\x00p\x00e\x00r\x00/\x00d\x00a\x00t\x00a\x00/\x00H\x00e\x00r\x00o\x00/\x00c\x00o\x00n\x00t\x00e\x00x\x00t\x00.\x00s\x00t\x00a\x00r\x00t\x00.\x00G\x00a\x00m\x00e\x00M\x00o\x00d\x00e\x00\x00/\x00v\x00=\x001\x00.\x00x\x00', 'pAvroSchemaURL': '/\x00d\x00a\x00t\x00a\x00/\x00d\x00a\x00t\x00a\x00l\x00a\x00k\x00e\x00/\x00t\x00m\x00p\x00/\x00k\x00a\x00f\x00k\x00a\x00d\x00u\x00m\x00p\x00e\x00r\x00/\x00d\x00a\x00t\x00a\x00/\x00H\x00e\x00r\x00o\x00/\x00c\x00o\x00n\x00t\x00e\x00x\x00t\x00.\x00s\x00t\x00a\x00r\x00t\x00.\x00G\x00a\x00m\x00e\x00M\x00o\x00d\x00e\x00\x00/\x00c\x00o\x00n\x00t\x00e\x00x\x00t\x00.\x00s\x00t\x00a\x00r\x00t\x00.\x00G\x00a\x00m\x00e\x00M\x00o\x00d\x00e\x00_\x001\x00.\x00x\x00.\x00a\x00v\x00s\x00c\x00', 'pTableName': 'h\x00e\x00r\x00o\x00_c\x00o\x00n\x00t\x00e\x00x\x00t\x00', 'pDataPartition': 'd\x00t\x00'} 

Pero cuando imprimo Keys and Values ​​uno por uno, se muestran correctamente:

 >>> print(oParameter['pTableName']) >>> 'hero_game_context_gamemode' >>> print(oParameter['pDataPartition']) >>> 'dt' 

¿Podría explicar por qué y cómo tener el diccionario codificado correctamente? Estoy usando estos parámetros en las consultas posteriores que se describen aquí: Hive ParseException en Drop Table Statement y supongo que las consultas fallan debido a este problema de encoding.

Después de investigar más a fondo, descubrí que la encoding no estaba configurada correctamente cuando se conectaba a Hadoop usando pyodbc.

Me estaba conectando así:

 import pyodbc import pandas oConnexionString = 'Driver={ClouderaHive};[...]' oConnexion = pyodbc.connect(oConnexionString, autocommit=True) oConnexion.setencoding(encoding='utf-8') 

Cambié para conectarme así:

 import pyodbc import pandas oConnexionString = 'Driver={ClouderaHive};[...]' oConnexion = pyodbc.connect(oConnexionString, autocommit=True) oConnexion.setdecoding(pyodbc.SQL_CHAR, encoding='utf-8') oConnexion.setdecoding(pyodbc.SQL_WCHAR, encoding='utf-8') oConnexion.setencoding(encoding='utf-8') 

Ahora, cuando compilo mi diccionario desde el dataframe, se muestra correctamente.