首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >awswrangler.s3.read_parquet忽略partition_filter参数

awswrangler.s3.read_parquet忽略partition_filter参数
EN

Stack Overflow用户
提问于 2021-04-06 22:26:32
回答 1查看 2.2K关注 0票数 2

partition_filter参数在wr.s3.read_parquet()中未能过滤S3上已分区的parquet数据集。下面是一个可重复的示例(可能需要正确配置的boto3_session参数):

数据集设置:

代码语言:javascript
复制
import pandas as pd
import awswrangler as wr
import boto3

s3_path = "s3://bucket-name/folder"

df = pd.DataFrame({"val": [1,3,2,5], "date": ['2021-04-01','2021-04-01','2021-04-02','2021-04-03']})

wr.s3.to_parquet(
    df = df,
    path = s3_path,
    dataset = True,
    partition_cols = ['date']
)
#> {'paths': ['s3://bucket-name/folder/date=2021-04-01/38399541e6fe4fa7866181479dd28e8e.snappy.parquet',
#>   's3://bucket-name/folder/date=2021-04-02/0a556212b5f941c7aa3c3775d2387419.snappy.parquet',
#>   's3://bucket-name/folder/date=2021-04-03/cb71397bea104787a50a90b078d564bd.snappy.parquet'],
#>  'partitions_values': {'s3://aardvark-gdelt/headlines/date=2021-04-01/': ['2021-04-01'],
#>   's3://bucket-name/folder/date=2021-04-02/': ['2021-04-02'],
#>   's3://bucket-name/folder/date=2021-04-03/': ['2021-04-03']}}

然后,可以在控制台中查看S3数据:

但是,使用日期筛选器读取数据返回4条记录:

代码语言:javascript
复制
wr.s3.read_parquet(path = s3_path,
                   partition_filter = lambda x: x["date"] >= "2021-04-02"
)
#>      val
#> 0    1
#> 1    3
#> 2    2
#> 3    5

实际上,sub lambda x: False仍然返回4行。我遗漏了什么?这是来自指导

partition_filter (可选的[可调用的[[Dictstr,str],bool])-回调函数过滤器应用于分区列(下推过滤器)。此函数必须接收单个参数(Dictstr,str),其中键是分区,名称和值是分区值。分区值将始终是从S3提取的字符串。此函数必须返回bool,即读取分区的True或忽略它的False。忽略如果dataset=False。*年“==”2020和x“月”== 1

我注意到返回的数据不包括上传数据中的分区'date‘列--在文档中看不到对此删除的引用,而且还不清楚是否相关。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-07 08:15:35

从文档中,Ignored if dataset=False.。将dataset=True作为参数添加到read_parquet调用中将完成此任务

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

https://stackoverflow.com/questions/66977251

复制
相关文章

相似问题

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