SpannerIO can OOM when writing large numbers of 'narrow' rows.
SpannerIO puts input mutation elements into batches for efficient writing.
These batches are limited by number of cells mutated, and size of data written (5000 cells, 1MB data). SpannerIO groups enough mutations to build 1000 of these groups (5M cells, 1GB data), then sorts and batches them.
When the number of cells and size of data is very small (<5 cells, <100 bytes), the memory overhead of storing millions of mutations for batching is significant, and can lead to OOMs.