繁体   English   中英

上传到 Azure Data Lake gen 2 后 Parquet 文件不可读(Python)

[英]Parquet file after upload to Azure Data Lake gen 2 not readable (Python)

你好 stackoverflow 社区,

我在读取镶木地板文件时遇到了一些问题。 在我使用 Python 将 Parquet 文件上传到 Azure Data Lake gen 2 后,问题就开始了。

我正在使用官方的 Micorsoft 文档: https://docs.microsoft.com/en-us/azure/storage/blobs/data-lake-storage-directory-file-acl-python

除了认证,这部分:

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.txt")
    local_file = open("C:\\file-to-upload.txt",'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)

当我使用代码上传一个小的 csv 文件时,它工作得很好。 csv 文件已上传,当我下载文件时,我可以毫无问题地打开它。

如果我将相同的数据框转换为一个小的镶木地板文件并上传文件,则上传工作正常。 但是当我下载文件并尝试打开它时,我收到错误消息:

ArrowInvalid:在页脚中找不到 Parquet 魔术字节。 文件已损坏,或者这不是镶木地板文件。

如果我直接读取 Parquet 字段而不上传,它可以正常工作。

有没有人建议我如何修改代码,这样我就不会破坏我的镶木地板文件?

谢谢!

我不确定你的代码有什么问题(你的代码似乎不完整),你可以试试这个代码,它对我有用:

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("data.parquet")

    df = pd.DataFrame({'one': [-1, np.nan, 2.5],
                       'two': ['foo', 'bar', 'baz'],
                       'three': [True, False, True]},
                      index=list('abc')).to_parquet()

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

    file_client.flush_data(len(df))

except Exception as e:
    print(e)

我今天刚刚在我的项目中解决了这个错误。

我正在使用pyarrow.parquet.write_table来编写我的 Parquet 文件。

我将本机 Python 文件 object 传递给where参数,这不知何故导致页脚永远不会被写入。

当我切换到使用PyArrow output 流而不是本机 Python 文件对象时,页脚在 stream 上正确写入,这为我解决了这个问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM