Вставка данных в таблицу impala с использованием Ibis Python
Я пытаюсь вставить df в созданную ibis таблицу impala с разделом. Я запускаю это на удаленном ядре, используя spyder 3.2.4 на машине с windows 10 и python 3.6.2 на машине с граничным узлом под управлением CentOS.
Я получаю следующую ошибку:
Writing DataFrame to temporary file
Writing CSV to: /tmp/ibis/pandas_0032f9dd1916426da62c8b4d8f4dfb92/0.csv
Traceback (most recent call last):
File "/usr/local/lib/python3.6/site-packages/IPython/core/interactiveshell.py", line 2910, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "", line 1, in
insert = target_table.insert(df3)
File "/usr/local/lib/python3.6/site-packages/ibis/impala/client.py", line 1674, in insert
writer, expr = write_temp_dataframe(self._client, obj)
File "/usr/local/lib/python3.6/site-packages/ibis/impala/pandas_interop.py", line 225, in write_temp_dataframe
return writer, writer.delimited_table(path)
File "/usr/local/lib/python3.6/site-packages/ibis/impala/pandas_interop.py", line 188, in delimited_table
schema = self.get_schema()
File "/usr/local/lib/python3.6/site-packages/ibis/impala/pandas_interop.py", line 184, in get_schema
return pandas_to_ibis_schema(self.df)
File "/usr/local/lib/python3.6/site-packages/ibis/impala/pandas_interop.py", line 219, in pandas_to_ibis_schema
return schema(pairs)
File "/usr/local/lib/python3.6/site-packages/ibis/expr/api.py", line 105, in schema
return Schema.from_tuples(pairs)
File "/usr/local/lib/python3.6/site-packages/ibis/expr/datatypes.py", line 109, in from_tuples
return Schema(names, types)
File "/usr/local/lib/python3.6/site-packages/ibis/expr/datatypes.py", line 55, in init
self.types = [validate_type(typ) for typ in types]
File "/usr/local/lib/python3.6/site-packages/ibis/expr/datatypes.py", line 55, in
self.types = [validate_type(typ) for typ in types]
File "/usr/local/lib/python3.6/site-packages/ibis/expr/datatypes.py", line 1040, in validate_type
return TypeParser(t).parse()
File "/usr/local/lib/python3.6/site-packages/ibis/expr/datatypes.py", line 901, in parse
t = self.type()
File "/usr/local/lib/python3.6/site-packages/ibis/expr/datatypes.py", line 1033, in type
raise SyntaxError('Type cannot be parsed: {}'.format(self.text))
File "", line unknown
SyntaxError: Type cannot be parsed: integer
1 ответ
Вместо редактирования упомянутого config_init.py
/questions/45739159/vstavka-dannyih-v-tablitsu-impala-s-ispolzovaniem-ibis-python/45739172#45739172
Легче назначить временную базу данных и путь с помощью ibis.options:
ibis.options.impala.temp_db = 'your_temp_db'
ibis.options.impala.temp_hdfs_path = 'your_temp_hdfs_path'
Ошибка приходила из-за структуры и безопасности системы hadoop. Пакет Ibis пытается создать temp_db & temp_hdfs_location в __ibis_tmp & /tmp/ibis/ соответственно. Поскольку в нашей системе местоположения по умолчанию не открыты для любого пользователя, кроме администратора root / system... команда вставки не выполнялась при получении данных из / tmp / ibis / в фактическую базу данных (все еще неясно, но может быть через __ibis_tmp dbase). Однажды мы отредактировали файл config_init.py для пакета ibis в разрешенное временное местоположение / db. Оно работало завораживающе.