python 如何将Polars Dataframe 写入Azure Blob存储?

3phpmpom  于 2023-09-29  发布在  Python
关注(0)|答案(2)|浏览(94)

给定Azure blob存储中的一个parquet文件,可以使用

pl.read_parquet('az://{container-name}/{filename}', storage_options={'account_name': ..., 'account_key': ...})

(the以上通过adlfs上的可选依赖项工作)
有没有什么东西是和write_parquet等价的?

balp4ylt

balp4ylt1#

我不能让它直接与Polars一起工作,但它可以与PyArrow一起工作。
以下是您可以执行的操作:

import polars as pl
import pyarrow.parquet as pq
from adlfs import AzureBlobFileSystem

abfs = AzureBlobFileSystem(account_name='account_name',account_key='account_key')

pq.write_table(polars_dataframe.to_arrow(), 'container/file_name.parquet', filesystem=abfs)
3ks5zfa0

3ks5zfa02#

有什么东西与write_parquet等价吗?

我所做的是在我自己的读写方法中将路径Map到pl名称空间上,以进行快捷连接处理。
假设您使用adlfsfsspec创建了一个文件系统(前者只是后者的 Package )。

azfs=fsspec.filesystem('abfss', connection_string="lgkjsklgjklfherirtguyshasdfkj")

因此,您的样板文件可能会变成:

import polars as pl
import fsspec
# The exact command to create the filesystem doesn't matter so long as it's a filesystem object.
azfs = fsspec.filesystem('abfss', connection_string="lgkjsklgjklfherirtguyshasdfkj")

def write_pq(self, REMOTE_PATH, **kwargs):
    with azfs.open(REMOTE_PATH, "wb") as file_pointer:
        self.write_parquet(file_pointer, **kwargs)
    
pl.DataFrame.write_pq=write_pq

为了保持一致性,你也可以这样做一个阅读器:

def read_pq(REMOTE_PATH, **kwargs):
    with azfs.open(REMOTE_PATH, "rb") as file_pointer:
        pl.read_parquet(file_pointer, **kwargs)
pl.read_pq=read_pq

Monkey将read_pq定义修补为pl并没有真正给予你任何东西,除非你要制作一个以上的包并加载它,而不是直接加载polars,这就是我所做的,所以如果你调用你的包mypolars,那么在你未来的脚本中,你会做from mypolars import pl,而不是import polars as pl
从那时起,您可以只执行df.write_pq("your blob path"),并可以使用df=pl.read_pq("your blob path")读取它
由于我们在调用中使用了**kwargs,您仍然可以使用本机read_parquetwrite_parquet可用的任何其他参数

相关问题