[英]How can I upload a .parquet file from my local machine to Azure Storage Data Lake Gen2?
[英]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.