首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将.parquet文件从本地计算机上传到Azure存储数据湖Gen2?

如何将.parquet文件从本地计算机上传到Azure存储数据湖Gen2?
EN

Stack Overflow用户
提问于 2022-06-20 19:35:26
回答 1查看 321关注 0票数 1

我的本地机器中有一组.parquet文件,我正试图上传到DataLakeGen2中的一个容器中。

我不能这样做:

代码语言:javascript
运行
复制
def upload_file_to_directory():
    try:

        file_system_client = service_client.get_file_system_client(file_system="my-file-system")

        directory_client = file_system_client.get_directory_client("my-directory")
        
        file_client = directory_client.create_file("uploaded-file.parquet")
        local_file = open("C:\\file-to-upload.parquet",'r')

        file_contents = local_file.read()

        file_client.append_data(data=file_contents, offset=0, length=len(file_contents))

        file_client.flush_data(len(file_contents))

    except Exception as e:
      print(e)

因为.parquet文件不能被.read()函数读取。

当我尝试这样做的时候:

代码语言:javascript
运行
复制
def upload_file_to_directory():

     file_system_client = service_client.get_file_system_client(file_system="my-file-system")

     directory_client = file_system_client.get_directory_client("my-directory")
        
     file_client = directory_client.create_file("uploaded-file.parquet")
     file_client.upload_file("C:\\file-to-upload.txt",'r')

我得到以下错误:

代码语言:javascript
运行
复制
AttributeError: 'DataLakeFileClient' object has no attribute 'upload_file'

有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-21 05:13:19

您收到此消息是因为您已经导入了DataLakeFileClient模块。尝试安装DataLakeServiceClient,因为它有upload_file方法。

代码语言:javascript
运行
复制
pip install DataLakeServiceClient

但是,要读取.parquet文件,解决方法之一是使用pandas。下面是对我有用的代码。

代码语言:javascript
运行
复制
storage_account_name='<ACCOUNT_NAME>'
storage_account_key='ACCOUNT_KEY'

service_client = DataLakeServiceClient(account_url="{}://{}.dfs.core.windows.net".format(
            "https", storage_account_name), credential=storage_account_key)
    
file_system_client = service_client.get_file_system_client(file_system="container")

directory_client = file_system_client.get_directory_client(directory="directory")
        
file_client = directory_client.create_file("uploaded-file.parquet")

local_file = pd.read_parquet("<YOUR_FILE_NAME>.parquet")
df = pd.DataFrame(local_file).to_parquet()

file_client.upload_data(data=df,overwrite=True) #Either of the lines works
#file_client.append_data(data=df, offset=0, length=len(df)) 
file_client.flush_data(len(df))

您可能需要导入DataLakeFileClient库才能完成此工作:

代码语言:javascript
运行
复制
from azure.storage.filedatalake import DataLakeServiceClient
import pandas as pd

结果:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72692155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档