◐ Shell
clean mode source ↗

Ondemand Feature with STRING type input fails on apply

Expected Behavior

New on demand feature view created.

Current Behavior

Attempting to apply a feature view with STRING type field fails with an exception below.

/home/user/source_code/feast_exp/.venv/bin/python /home/user/source_code/feast_exp/src/od.py 
/home/user/source_code/feast_exp/.venv/lib/python3.11/site-packages/feast/feature_store.py:580: RuntimeWarning: On demand feature view is an experimental feature. This API is stable, but the functionality does not scale well for offline retrieval
  warnings.warn(
Traceback (most recent call last):
  File "/home/user/source_code/feast_exp/src/od.py", line 23, in <module>
    STORE.apply([r,transform])
  File "/home/user/source_code/feast_exp/.venv/lib/python3.11/site-packages/feast/feature_store.py", line 936, in apply
    self._make_inferences(
  File "/home/user/source_code/feast_exp/.venv/lib/python3.11/site-packages/feast/feature_store.py", line 643, in _make_inferences
    odfv.infer_features()
  File "/home/user/source_code/feast_exp/.venv/lib/python3.11/site-packages/feast/on_demand_feature_view.py", line 654, in infer_features
    inferred_features = self.feature_transformation.infer_features(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/source_code/feast_exp/.venv/lib/python3.11/site-packages/feast/transformation/pandas_transformation.py", line 98, in infer_features
    python_type_to_feast_value_type(
  File "/home/user/source_code/feast_exp/.venv/lib/python3.11/site-packages/feast/type_map.py", line 214, in python_type_to_feast_value_type
    raise ValueError(
ValueError: Value with native type object cannot be converted into Feast value type

Process finished with exit code 1

Steps to reproduce

Attempt to apply the feature view below.

from feast import on_demand_feature_view
from feast import RequestSource
from feast import Field
from feast.types import String,Int32

from feature_store.configs.store import STORE

r=RequestSource(
    name="r",
    timestamp_field="event_ts",
    schema=[
        Field(name="input_1", dtype=String)
    ]
)


@on_demand_feature_view.on_demand_feature_view(name="a",schema=[],entities=[],sources=[r])
def transform(df):
    return df

if __name__ == "__main__":
    STORE.apply([r,transform])

Specifications

  • Version: 0.53.0
  • Platform: Linux
  • Subsystem: Ubuntu

Possible Solution

Running the apply on debug mode shows that the input column is of type object instead of string .
When the column is explicitly type cast to string with the line below in the transform method, the apply successfully passes.
df["input_1"]=df["input_1"].astype("string")

One solution would be to ensure that the input source attempts to type cast to defined type and raise an exception if it cannot be type cast.