Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Erro do Airflow mysql para gcp Dag


De acordo com seu rastreamento, seu código está quebrando em este ponto . Como você pode ver, ele processa o código:
json.dump(row_dict, tmp_file_handle)

tmp_file_handle é um NamedTemporaryFile inicializado com argumentos de entrada padrão, ou seja, simula um arquivo aberto com w+b mode (e, portanto, só aceita dados semelhantes a bytes como entrada).

O problema é que no Python 2 todas as strings são bytes, enquanto no Python 3 as strings são textos (codificados por padrão como utf-8 ).

Se você abrir um Python 2 e executar este código:
In [1]: from tempfile import NamedTemporaryFile
In [2]: tmp_f = NamedTemporaryFile(delete=True)
In [3]: import json
In [4]: json.dump({'1': 1}, tmp_f)

Funciona bem.

Mas se você abrir um Python 3 e executar o mesmo código:
In [54]: from tempfile import NamedTemporaryFile
In [55]: tmp_f = NamedTemporaryFile(delete=True)
In [56]: import json
In [57]: json.dump({'1': 1}, tmp_f)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-57-81743b9013c4> in <module>()
----> 1 json.dump({'1': 1}, tmp_f)

/usr/local/lib/python3.6/json/__init__.py in dump(obj, fp, skipkeys, ensure_ascii, check_circular, allow_nan, cls, indent, separators, default, sort_keys, **kw)
    178     # a debuggability cost
    179     for chunk in iterable:
--> 180         fp.write(chunk)
    181 
    182 

/usr/local/lib/python3.6/tempfile.py in func_wrapper(*args, **kwargs)
    481             @_functools.wraps(func)
    482             def func_wrapper(*args, **kwargs):
--> 483                 return func(*args, **kwargs)
    484             # Avoid closing the file as long as the wrapper is alive,
    485             # see issue #18879.

TypeError: a bytes-like object is required, not 'str'

Recebemos o mesmo erro que o seu.

Isso significa que o Airflow ainda não é totalmente compatível com o Python 3 (como você pode ver no cobertura de teste , o módulo airflow/contrib/operators/mysql_to_gcs.py ainda não foi testado em python 2 ou 3). Uma maneira de confirmar isso seria executar seu código usando python 2 e ver se funciona.

Eu recomendo criar um problema no seu JIRA solicitando portabilidade para ambas as versões do Python.