如何使用时间戳过滤dask.dataframe.read_parquet?

时间:2019-09-14 11:26:23

标签: python dataframe google-cloud-storage dask parquet

我正在尝试使用dask.dataframe.read_parquet方法读取某些实木复合地板文件。在数据中,我有一个名为timestamp的列,其中包含以下数据:

0     2018-12-20 19:00:00
1     2018-12-20 20:00:00
2     2018-12-20 21:00:00
3     2018-12-20 22:00:00
4     2018-12-20 23:00:00
5     2018-12-21 00:00:00
6     2018-12-21 01:00:00
7     2018-12-21 02:00:00
8     2018-12-21 03:00:00
9     2018-12-21 04:00:00
10    2018-12-21 05:00:00
11    2018-12-21 06:00:00
12    2018-12-21 07:00:00
13    2018-12-21 08:00:00
14    2018-12-21 09:00:00
15    2018-12-21 10:00:00
16    2018-12-21 11:00:00
17    2018-12-21 12:00:00
18    2018-12-21 13:00:00
19    2018-12-21 14:00:00
20    2018-12-21 15:00:00

,我想基于时间戳进行过滤,并返回过去10天内的数据。我该怎么做?

我尝试过类似的事情:

filter_timestamp_days = pd.Timestamp(datetime.today() - timedelta(days=days))
filters = [('timestamp', '>', filter_timestamp_days)]
df = dask_df.read_parquet(DATA_DIR, engine='pyarrow', filters=filters)

但是我得到了错误:

TypeError: Cannot compare type 'Timestamp' with type 'bytes_'

1 个答案:

答案 0 :(得分:2)

原来,问题出在我正在使用的数据源中。我测试了最初用dask编写的另一个数据源,它的工作原理如下:

filter_timestamp_days = pd.Timestamp(datetime.today() - timedelta(days=days))
filters = [('timestamp', '>', filter_timestamp_days)]
df = dask_df.read_parquet(DATA_DIR, engine='fastparquet', filters=filters)

我不需要进一步转换filter_timestamp_days。以前的数据源是使用Scala客户端编写的,似乎元数据在某种程度上难以理解。

谢谢大家的贡献。