Использование Python 3.5.2, воздушный поток 1.9.0
Попытка настроить крючок для свиньи, см. Документацию здесь: https://github.com/apache/incubator-airflow/blob/master/airflow/hooks/pig_hook.py
, следуя примеру в строках 50-52
>>> ph = PigCliHook()
>>> result = ph.run_cli("ls /;")
>>> ("hdfs://" in result)
Выдает следующую ошибку:
File "python3.5/site-packages/airflow/hooks/pig_hook.py", line 53, in run_cli
f.write(pig)
File "python3.5/tempfile.py", line 622, in func_wrapper
return func(*args, **kwargs)
TypeError: a bytes-like object is required, not 'str'
При обновлении для запуска:
>>> ph = PigCliHook()
>>> result = ph.run_cli("ls /;".encode('utf-8'))
>>> ("hdfs://" in result)
Ошибка становится:
File "python3.5/site-packages/airflow/hooks/pig_hook.py", line 74, in run_cli
stdout += line
TypeError: Can't convert 'bytes' object to str implicitly
А позже в том же файле pig_hook.py он принимает строковый тип для этого поля, поэтому я не думаю, что передача входных данных как объекта в байтах является правильной.
Я считаю, что объект, вызывающий проблему,NamedTeditionalFile (из строки 52 в pig_hook.py), который открывается по умолчанию в режиме 'w + b', как описано в следующем сообщении:
https://bugs.python.org/issue29245
Но если я изменю строку 53в файле pig_hook.py для чтения:
with NamedTemporaryFile(dir=tmp_dir,'w') as f:
или
with NamedTemporaryFile(dir=tmp_dir, mode='w') as f:
он по-прежнему ожидает байтовый массив, приводящий к той же ошибке:
File "python3.5/site-packages/airflow/hooks/pig_hook.py", line 53, in run_cli
f.write(pig)
File "python3.5/tempfile.py", line 622, in func_wrapper
return func(*args, **kwargs)
TypeError: a bytes-like object is required, not 'str'
Кто-нибудь знаеткак я могу решить эту проблему?Кажется, я не могу заставить NamedTeoraryFile открываться в режиме, который использует строку, а остальная часть кода принимает строку.