You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jira@arrow.apache.org by "Josh (Jira)" <ji...@apache.org> on 2020/09/22 21:01:00 UTC

[jira] [Created] (ARROW-10067) [Python] Manual dataset with timestamp partition type error

Josh created ARROW-10067:
----------------------------

             Summary: [Python] Manual dataset with timestamp partition type error
                 Key: ARROW-10067
                 URL: https://issues.apache.org/jira/browse/ARROW-10067
             Project: Apache Arrow
          Issue Type: Bug
          Components: Python
    Affects Versions: 1.0.1
            Reporter: Josh


Going off the docs [https://arrow.apache.org/docs/python/dataset.html#manual-specification-of-the-dataset] but instead using date partitioning. If you create the partitions using pandas Timestamps you get timestamp[ns] vs timestamp[us] type errors.

 
{code:java}
import tempfile
import pathlib

import numpy as np
import pandas as pd
import pyarrow as pa
import pyarrow.dataset as ds
import pyarrow.parquet as pq
from pyarrow import fs


base = pathlib.Path(tempfile.gettempdir())
table = pa.table({"col1": range(3), "col2": np.random.randn(3)})
(base / "parquet_dataset_manual").mkdir(exist_ok=True)
pq.write_table(table, base / "parquet_dataset_manual" / "data_20180101.parquet")
pq.write_table(table, base / "parquet_dataset_manual" / "data_20180102.parquet")
schema = pa.schema([("date", pa.timestamp("ns")), ("col1", pa.int64()), ("col2", pa.float64())])
dataset = ds.FileSystemDataset.from_paths(
    ["data_20180101.parquet", "data_20180102.parquet"],
    schema=schema,
    format=ds.ParquetFileFormat(),
    filesystem=fs.SubTreeFileSystem(str(base / "parquet_dataset_manual"), fs.LocalFileSystem()),
    partitions=[ds.field("date") == pd.Timestamp("2018-01-01"), ds.field("date") == pd.Timestamp("2018-01-01")],
)
print(dataset.to_table().to_pandas())
# pyarrow.lib.ArrowTypeError: field date: timestamp[ns] cannot be materialized from scalar of type timestamp[us]
print(dataset.to_table(filter=ds.field("date") == pd.Timestamp("2018-01-01")).to_pandas())
# ../src/arrow/result.cc:28: ValueOrDie called on an error: Type error: Cannot compare scalars of differing type: timestamp[ns] vs timestamp[us]

dataset = ds.FileSystemDataset.from_paths(
    ["data_20180101.parquet", "data_20180102.parquet"],
    schema=schema,
    format=ds.ParquetFileFormat(),
    filesystem=fs.SubTreeFileSystem(str(base / "parquet_dataset_manual"), fs.LocalFileSystem()),
    partitions=[
        ds.field("date") == pa.scalar(pd.Timestamp("2018-01-01"), pa.timestamp("ns")),
        ds.field("date") == pa.scalar(pd.Timestamp("2018-01-02"), pa.timestamp("ns")),
    ],
)
print(dataset.to_table().to_pandas())
print(dataset.to_table(filter=ds.field("date") == pd.Timestamp("2018-01-01")).to_pandas()){code}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)