diff --git a/cpp/src/arrow/compute/kernels/scalar_fill_null.cc b/cpp/src/arrow/compute/kernels/scalar_fill_null.cc index 85af0e5b1cd13..cf22b0de3dcf5 100644 --- a/cpp/src/arrow/compute/kernels/scalar_fill_null.cc +++ b/cpp/src/arrow/compute/kernels/scalar_fill_null.cc @@ -162,7 +162,6 @@ struct FillNullFunctor::value>> { const ArrayData& input = *batch[0].array(); const auto& fill_value_scalar = checked_cast(*batch[1].scalar()); - util::string_view fill_value(*fill_value_scalar.value); ArrayData* output = out->mutable_array(); // Ensure the kernel is configured properly to have no validity bitmap / @@ -172,6 +171,7 @@ struct FillNullFunctor::value>> { const int64_t null_count = input.GetNullCount(); if (null_count > 0 && fill_value_scalar.is_valid) { + util::string_view fill_value(*fill_value_scalar.value); BuilderType builder(input.type, ctx->memory_pool()); RETURN_NOT_OK(builder.ReserveData(input.buffers[2]->size() + fill_value.length() * null_count)); diff --git a/python/pyarrow/tests/test_compute.py b/python/pyarrow/tests/test_compute.py index 127b271dda5aa..a9a2c0f347d4b 100644 --- a/python/pyarrow/tests/test_compute.py +++ b/python/pyarrow/tests/test_compute.py @@ -1078,6 +1078,11 @@ def test_fill_null(): expected = pa.array([b'a', b'bb', b'ccc'], type=pa.large_binary()) assert result.equals(expected) + arr = pa.array(['a', 'bb', None]) + result = arr.fill_null(None) + expected = pa.array(['a', 'bb', None]) + assert result.equals(expected) + @pytest.mark.parametrize('arrow_type', numerical_arrow_types) def test_fill_null_array(arrow_type):