[ 
https://issues.apache.org/jira/browse/SPARK-59599?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

ASF GitHub Bot updated SPARK-59599:
-----------------------------------
    Labels: pull-request-available  (was: )

> Pre-size the ArrowConverters.serializeBatch output buffer to avoid repeated 
> reallocation
> ----------------------------------------------------------------------------------------
>
>                 Key: SPARK-59599
>                 URL: https://issues.apache.org/jira/browse/SPARK-59599
>             Project: Spark
>          Issue Type: Improvement
>          Components: SQL
>    Affects Versions: 4.1.0
>            Reporter: David Mollitor
>            Priority: Minor
>              Labels: pull-request-available
>
> h3. Problem
> {{ArrowConverters.serializeBatch}} serializes a single {{ArrowRecordBatch}} 
> into a {{byte[]}} through a {{ByteArrayOutputStream}} created with no initial 
> capacity:
> {code:scala}
> val out = new ByteArrayOutputStream()
> val writeChannel = new WriteChannel(Channels.newChannel(out))
> MessageSerializer.serialize(writeChannel, batch)
> out.toByteArray
> {code}
> A no-arg {{ByteArrayOutputStream}} starts at the JDK default of 32 bytes and 
> grows by repeatedly doubling its backing array ({{{}grow{}}} + 
> {{{}Arrays.copyOf{}}}).
> The batch is written {*}incrementally{*}, not as one block: 
> {{MessageSerializer.serialize}} writes the message metadata and then each of 
> the batch's buffers (with alignment padding) individually, and the 
> {{WritableByteChannel}} returned by {{Channels.newChannel}} further splits 
> every write into chunks of at most 8 KB. So a 32-byte buffer reallocates and 
> copies its contents on the order of {{log2(batchSize / 32)}} times per batch, 
> producing that many short-lived intermediate arrays (GC pressure) plus the 
> copies.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to