mtofano opened a new issue, #44485:
URL: https://github.com/apache/arrow/issues/44485

   ### Describe the usage question you have. Please include as many useful 
details as  possible.
   
   
   Hi there,
   
   I have a large on-disk dataset that I am creating as follows (where 
`pa_path` is a `str` and `pa_fs` is of type `S3FileSystem`):
   
   ```py
   dataset = ds.dataset(
       source=pa_path,
       filesystem=pa_fs,
       format="parquet",
       partitioning=ds.partitioning(
           schema=pa.schema(
               fields=[
                   ("underlier_id", pa.uint64()),
                   ("trade_date", pa.date32())
               ]
           ),
           flavor="filename"
       )
   )
   ```
   
   The schema of my dataset is as follows (omitting the full struct schema for 
`data` as it is rather large):
   
   ```py
   underlier_id: uint64
   trade_date: date32[day]
   as_of_time: timestamp[ns]
   currency: dictionary<values=string, indices=int32, ordered=0>
   data: struct
   ```
   
   The `as_of_time` column contains minutely binned data, but there are cases 
where a user query will not exactly match up with the minutely bins we have 
available. In this case, I want to perform an as of join so that we can pull in 
the most recent data. 
   
   I am using polars to create an `InMemoryDataset` from a `Table` that I have 
populated with the desired `underlier_id` and `as_of_time` columns: 
   
   ```py
   as_of_df = pl.DataFrame(
       data={
           "underlier_id": 5135108,
           "trade_date": dt.date(2024, 1, 5),
           "as_of_time": dt.datetime(2024, 1, 5, 16, 31),
       },
       schema={
           "underlier_id": pl.UInt64,
           "trade_date": pl.Date,
           "as_of_time": pl.Datetime("ns")
       }
   )
   
   as_of_table = as_of_df.to_arrow()
   
   as_of_ds = ds.InMemoryDataset(source=as_of_table)
   ```
   
   And finally performing the `join_asof` as follows:
   
   ```py
   result = as_of_ds.join_asof(
       filtered_ds,
       on="as_of_time",
       by=["underlier_id", "trade_date"],
       tolerance=0
   )
   
   print(result.to_table())
   ```
   
   However, it seems that I am getting the following error:
   
   ```
   {
        "name": "ArrowInvalid",
        "message": "Unsupported type for data field currency : 
dictionary<values=string, indices=int32, ordered=0>",
        "stack": 
"---------------------------------------------------------------------------
   ArrowInvalid                              Traceback (most recent call last)
   Cell In[24], line 1
   ----> 1 result = as_of_ds.join_asof(
         2     filtered_ds,
         3     on=\"as_of_time\",
         4     by=[\"underlier_id\", \"trade_date\"],
         5     tolerance=0
         6 )
         8 print(result.to_table())
   
   File 
~/.conda/envs/pog-vol/lib/python3.11/site-packages/pyarrow/_dataset.pyx:943, in 
pyarrow._dataset.Dataset.join_asof()
   
   File 
~/.conda/envs/pog-vol/lib/python3.11/site-packages/pyarrow/acero.py:333, in 
_perform_join_asof(left_operand, left_on, left_by, right_operand, right_on, 
right_by, tolerance, use_threads, output_type)
       326 join_opts = AsofJoinNodeOptions(
       327     left_on, left_by, right_on, right_by, tolerance
       328 )
       329 decl = Declaration(
       330     \"asofjoin\", options=join_opts, inputs=[left_source, 
right_source]
       331 )
   --> 333 result_table = decl.to_table(use_threads=use_threads)
       335 if output_type == Table:
       336     return result_table
   
   File 
~/.conda/envs/pog-vol/lib/python3.11/site-packages/pyarrow/_acero.pyx:590, in 
pyarrow._acero.Declaration.to_table()
   
   File 
~/.conda/envs/pog-vol/lib/python3.11/site-packages/pyarrow/error.pxi:155, in 
pyarrow.lib.pyarrow_internal_check_status()
   
   File 
~/.conda/envs/pog-vol/lib/python3.11/site-packages/pyarrow/error.pxi:92, in 
pyarrow.lib.check_status()
   
   ArrowInvalid: Unsupported type for data field currency : 
dictionary<values=string, indices=int32, ordered=0>"
   }
   ```
   
   I am seeking some help to answer the following two questions:
   1) Am I using the `join_asof` feature correctly?
   2) If yes, why is this not working on the dictionary encoded column?
   
   Thank you in advance for any and all help! Please let me know if more 
information is required.
   
   ### Component(s)
   
   Python


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to