2017-02-23 184 views
2

Я импортировал файл excel в базу данных pandas и завершил процесс поиска и очистки данных.Пишите Python Dataframe в CSV-файл непосредственно в Azure Datalake

Теперь я хочу записать очищенный файл данных в файл csv обратно в Azure DataLake, не сохраняя его сначала как локальный файл. Я использую панды 3.

Мой код выглядит следующим образом:

token = lib.auth(tenant_id = '', 
       client_secret ='', 
       client_id = '') 

adl = core.AzureDLFileSystem(token, store_name) 

with adl.open(path='Raw/Gold/Myfile.csv', mode='wb') as f: 
    **in_xls.to_csv(f, encoding='utf-8')** 
    f.close() 

я получаю следующее дамп в заявлении выделены жирным шрифтом.

TypeError: требуется байт-подобный объект, а не 'ул'

Я тоже пытался, но без удачи

with adl.open(path='Raw/Gold/Myfile.csv', mode='wb') as f: 
    with io.BytesIO(in_xls) as byte_buf: 
     byte_buf.to_csv(f, encoding='utf-8') 
     f.close() 

Я получаю ошибку ниже:

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

Любые идеи/советы будут очень благодарны

+0

Работает ли он без режима 'b'? то есть. 'adl.open (path = 'Raw/Gold/Myfile.csv', mode = 'w')' – EdChum

+0

Нет, только «w» не поддерживается в Python 3. Только двоичный файл ... –

+0

Я спросил нашего премьер-министра SDK для контроля. Однако можете ли вы рассказать мне, почему вы хотите использовать скрипты Python на стороне клиента, которые загружают данные из ADLS, а затем загружают данные снова вместо использования U-SQL (возможно, с расширением Python), который работает непосредственно с данными в облаке? –

ответ

1

Я получил эту работу с пандами на днях с помощью pyth на 3.X. Этот код работает на встроенной машине и подключается к хранилищу данных в облаке.

Предполагая, что ДФ является панда dataframe вы можете использовать следующий код:

adl = core.AzureDLFileSystem(token, store_name='YOUR_ADLS_STORE_NAME') 
     #toke is your login token that was created by whatever ADLS login method you decided. 
     #Personally I use the ServiceProvider login 
df_str = df.to_csv() 
with adl.open('/path/to/file/on/adls/newfile.csv', 'wb') as f: 
    f.write(str.encode(df_str)) 
    f.close() 

Этот ключ преобразующего dataframe в строку и чем при использовании str.encode функции().

Надеюсь, это поможет.

+0

Работает отлично! Благодаря... – Memin