从Azure Data Lake将平面文件加载到数据框中时遇到问题

时间:2019-05-23 21:36:14

标签: python pandas azure dataframe

我写了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]

1 个答案:

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

希望有帮助。