From a925c5fd19a86d0af9cc5153a99407aef91b915a Mon Sep 17 00:00:00 2001 From: cutoutsy Date: Thu, 16 Apr 2026 10:29:48 +0800 Subject: [PATCH 1/2] fix: Wrap LocalOutputNode return value in ArrowTableValue for consistent DAG output Signed-off-by: cutoutsy --- sdk/python/feast/infra/compute_engines/local/nodes.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/sdk/python/feast/infra/compute_engines/local/nodes.py b/sdk/python/feast/infra/compute_engines/local/nodes.py index ae539d2b5b..808231419c 100644 --- a/sdk/python/feast/infra/compute_engines/local/nodes.py +++ b/sdk/python/feast/infra/compute_engines/local/nodes.py @@ -361,10 +361,11 @@ def __init__( def execute(self, context: ExecutionContext) -> ArrowTableValue: input_table = self.get_single_table(context).data - context.node_outputs[self.name] = input_table + output = ArrowTableValue(data=input_table) + context.node_outputs[self.name] = output if input_table.num_rows == 0: - return input_table + return output if self.feature_view.online: online_store = context.online_store @@ -403,4 +404,4 @@ def execute(self, context: ExecutionContext) -> ArrowTableValue: progress=lambda x: None, ) - return input_table + return output From fc4729a26b995720b440fca6c4ff6d3c9d47f58b Mon Sep 17 00:00:00 2001 From: cutoutsy Date: Thu, 16 Apr 2026 10:59:34 +0800 Subject: [PATCH 2/2] fix: Update test to access ArrowTableValue.data.num_rows instead of num_rows Signed-off-by: cutoutsy --- .../tests/unit/infra/compute_engines/local/test_nodes.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sdk/python/tests/unit/infra/compute_engines/local/test_nodes.py b/sdk/python/tests/unit/infra/compute_engines/local/test_nodes.py index edf7d74db1..897211b374 100644 --- a/sdk/python/tests/unit/infra/compute_engines/local/test_nodes.py +++ b/sdk/python/tests/unit/infra/compute_engines/local/test_nodes.py @@ -216,7 +216,8 @@ def test_local_output_node(): node.add_input(MagicMock()) node.inputs[0].name = "source" result = node.execute(context) - assert result.num_rows == 4 + assert isinstance(result, ArrowTableValue) + assert result.data.num_rows == 4 def test_local_output_node_online_write_default_batch():