Skip to content

Ondemand Feature with STRING type input fails on apply #5641

@OptimeeringBigya

Description

@OptimeeringBigya

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.

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions