我写了Python,将Azure Data Lake中的数据加载到数据帧中进行处理。我有两种文件类型(CSV和平面文件)。 CSV加载没有问题,但是平面文件出错了。
我知道这是文件格式的问题。它给出类型错误:需要一个类似字节的对象,而不是'str'
我不知道如何转换文件以使其正常工作。香港专业教育学院尝试编码和解码,但我遇到了一个属性错误:'AzureDLFile'对象没有属性'decode'
当我在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]
答案 0 :(得分:0)
键正在将数据帧转换为字符串,而不是使用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()**
希望有帮助。