This problem is shown in this issue: https://github.com/apache/arrow/issues/15173Let me talk about it briefly: * Encoder doesn't write "num_values" on Page payload for BYTE_STREAM_SPLIT, but using "num_values" as stride in BYTE_STREAM_SPLIT * When decoding, for DATA_PAGE_V2, it can now the num_values and num_nulls in the page, however, in DATA_PAGE_V1, without statistics, we should read def-levels and rep-levels to get the real num-of-values. And without the num-of-values, we aren't able to decode BYTE_STREAM_SPLIT correctly The bug-reproducing code is in the issue.