Skip to content

Commit dfbb743

Browse files
authored
fix: Fix STRING type handling in on-demand feature views (#5669)
Signed-off-by: ntkathole <nikhilkathole2683@gmail.com>
1 parent eeef56e commit dfbb743

2 files changed

Lines changed: 21 additions & 14 deletions

File tree

sdk/python/feast/type_map.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,16 @@ def python_type_to_feast_value_type(
172172
if type_name in type_map:
173173
return type_map[type_name]
174174

175+
# Handle pandas "object" dtype by inspecting the actual value
176+
if type_name == "object" and value is not None:
177+
# Check the actual type of the value
178+
actual_type = type(value).__name__.lower()
179+
if actual_type == "str":
180+
return ValueType.STRING
181+
# If it's a different type wrapped in object, try to infer from the value
182+
elif actual_type in type_map:
183+
return type_map[actual_type]
184+
175185
if isinstance(value, np.ndarray) and str(value.dtype) in type_map:
176186
item_type = type_map[str(value.dtype)]
177187
return ValueType[item_type.name + "_LIST"]

sdk/python/tests/unit/infra/test_inference_unit_tests.py

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -96,29 +96,27 @@ def python_native_test_view(input_dict: dict[str, Any]) -> dict[str, Any]:
9696

9797
python_native_test_view.infer_features()
9898

99-
100-
def test_on_demand_features_invalid_type_inference():
101-
# Create Feature Views
102-
date_request = RequestSource(
103-
name="date_request",
104-
schema=[Field(name="some_date", dtype=UnixTimestamp)],
105-
)
106-
10799
@on_demand_feature_view(
108100
sources=[date_request],
109101
schema=[
110102
Field(name="output", dtype=UnixTimestamp),
111103
Field(name="object_output", dtype=String),
112104
],
113105
)
114-
def invalid_test_view(features_df: pd.DataFrame) -> pd.DataFrame:
106+
def object_string_test_view(features_df: pd.DataFrame) -> pd.DataFrame:
115107
data = pd.DataFrame()
116108
data["output"] = features_df["some_date"]
117109
data["object_output"] = features_df["some_date"].astype(str)
118110
return data
119111

120-
with pytest.raises(ValueError, match="Value with native type object"):
121-
invalid_test_view.infer_features()
112+
object_string_test_view.infer_features()
113+
114+
115+
def test_on_demand_features_invalid_type_inference():
116+
date_request = RequestSource(
117+
name="date_request",
118+
schema=[Field(name="some_date", dtype=UnixTimestamp)],
119+
)
122120

123121
@on_demand_feature_view(
124122
schema=[
@@ -184,14 +182,13 @@ def test_view(features_df: pd.DataFrame) -> pd.DataFrame:
184182
Field(name="object_output", dtype=String),
185183
],
186184
)
187-
def invalid_test_view(features_df: pd.DataFrame) -> pd.DataFrame:
185+
def object_string_view(features_df: pd.DataFrame) -> pd.DataFrame:
188186
data = pd.DataFrame()
189187
data["output"] = features_df["some_date"]
190188
data["object_output"] = features_df["some_date"].astype(str)
191189
return data
192190

193-
with pytest.raises(ValueError, match="Value with native type object"):
194-
invalid_test_view.infer_features()
191+
object_string_view.infer_features()
195192

196193
@on_demand_feature_view(
197194
sources=[date_request],

0 commit comments

Comments
 (0)