आपके ट्रेसबैक के अनुसार, आपका कोड यह बिंदु . जैसा कि आप देख सकते हैं, यह कोड को प्रोसेस करता है:
json.dump(row_dict, tmp_file_handle)
tmp_file_handle
एक NamedTemporaryFile
है आरंभिक
डिफ़ॉल्ट इनपुट आर्ग के साथ, यानी यह w+b
. के साथ खोली गई फ़ाइल का अनुकरण करता है मोड (और इसलिए इनपुट के रूप में केवल बाइट्स जैसे डेटा को स्वीकार करता है)।
समस्या यह है कि पायथन 2 में सभी स्ट्रिंग्स बाइट्स हैं जबकि पायथन 3 स्ट्रिंग्स टेक्स्ट हैं (डिफ़ॉल्ट रूप से utf-8
के रूप में एन्कोडेड हैं) )।
यदि आप एक पायथन 2 खोलते हैं और इस कोड को चलाते हैं:
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)
यह ठीक काम करता है।
लेकिन अगर आप एक पायथन 3 खोलते हैं और उसी कोड को चलाते हैं:
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'
हमें आपकी जैसी ही त्रुटि मिलती है।
इसका मतलब है कि एयरफ्लो अभी भी पायथन 3 के लिए पूरी तरह से समर्थित नहीं है (जैसा कि आप परीक्षण कवरेज
, मॉड्यूल airflow/contrib/operators/mysql_to_gcs.py
अभी तक या तो अजगर 2 या 3 में परीक्षण नहीं किया गया है)। इसकी पुष्टि करने का एक तरीका यह होगा कि आप अपने कोड को अजगर 2 का उपयोग करके चलाएं और देखें कि क्या यह काम करता है।
मेरा सुझाव है कि उनके JIRA पर कोई समस्या बनाएं। पायथन के दोनों संस्करणों के लिए पोर्टेबिलिटी का अनुरोध करना।