Проблема при загрузке плоского файла во фрейм данных из озера данных Azure - PullRequest
2 голосов
/ 24 мая 2019

Я написал Python для загрузки данных из озера данных Azure во фрейм данных для обработки. У меня есть два типа файлов (CSV и плоские файлы). CSV загружается без проблем, но ошибки в плоском файле отсутствуют.

Я знаю, что это проблема с форматом файла. Он выдает ошибку типа: требуется объект, похожий на байты, а не 'str'

Я не могу понять, как конвертировать файл, чтобы он работал правильно. Я пытался кодировать и декодировать, но я столкнулся с ошибкой атрибута: объект «AzureDLFile» не имеет атрибута «декодировать»

Когда я тестировал скрипт локально на моем диске C: \, он работал нормально, поэтому я подозреваю, что файл, выходящий из Azure, отличается. У кого-нибудь есть идеи, как конвертировать файл, чтобы я мог его ввести?

import numpy as np
import pandas as pd
import datetime
import os

from azure.datalake.store import core, lib, multithread

USERNAME = "xxxx"
PASSWORD = "xxxx"
TENANT_ID = "xxxx"
STORE_NAME = "xxxx"

token = lib.auth(TENANT_ID, USERNAME, PASSWORD)
adl = core.AzureDLFileSystem(token, store_name=STORE_NAME)

#EXAMPLE 1 - OPENING A CSV FILE INTO A DATA FRAME - WORKS FINE
f = adl.open('/path/filename1.txt')
df = pd.read_csv(f,dtype=str, sep='|')
df[:3]

#EXAMPLE 2 - OPENING A FLAT FIXED WIDTH FILE INTO A DATA FRAME - DOES NOT WORK
f1 = adl.open('/path/filename2') #THIS FILE HAS NO EXTENSION
df2 = pd.read_fwf(f1)
df2[:3]

1 Ответ

0 голосов
/ 28 мая 2019

Ключ преобразует фрейм данных в строку и затем использует функцию str.encode ().

Попробуйте что-то вроде ниже

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()**

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...