Hi Martin,

The vote succeeded. 4 +1 votes (3 bindings) and no -1 votes.
I'll submit your PR soon.

Cheers,
Gabor

On Fri, Nov 29, 2019 at 10:59 PM Radev, Martin <[email protected]> wrote:

> Dear Parquet community,
>
> thank you for the votes and time spent reviewing.
>
> There have been so far 4 votes in the mailing list and Zoltan added a +1
> to the Github pull request some time ago.
> How many more would be necessary to have the spec change accepted?
> Once that is done I can continue with polishing my changes for Arrow and
> Parquet-MR.
>
> There are some new things.
> I did some further tests and implementation changes (no spec changes):
>
>   1.  I added more real data tests from various sources.
>   2.  I generated synthetic data with varying zero-order entropy of an
> element for each test file.
> This should help give some idea when different encoding-compressor options
> perform well.
>   3.  I investigated different possible implementations for the
> encoder/decoder and added the most efficient option locally into Arrow's
> parquet-cpp.
> This was necessary since I found out that my early scalar implementation
> in Arrow did not get auto-vectorized by the compiler and thus was somewhat
> inefficient especially if the data is present in the cache.
>
> The report is available here:
> https://github.com/martinradev/arrow-fp-compression-bench/blob/master/optimize_byte_stream_split/report_final.pdf.
> It mostly contains tables and plots with some context information and
> reasoning.
> The two SIMD implementations I wrote are available here in a standalone
> program for benchmarking and validating:
> https://github.com/martinradev/arrow-fp-compression-bench/blob/master/optimize_byte_stream_split/prog.cpp
>
> The short story is that the BYTE_STREAM_SPLIT encoding performs also the
> best among all other options for the newly added test cases.
> Furthermore, the plot for data with varying entropy shows that the
> BYTE_STREAM_SPLIT encoding with zstd provides the best compression ratio
> when the entropy per float element is >8 bits. The BYTE_STREAM_SPLIT
> encoding+zstd provides better write throughput than all other combinations.
> It also improves read throughput than to just using ZSTD to compress data.
> The report also shows the performance difference for different
> implementations of the encoder/decoder and compare it to memcpy. There's a
> clear performance advantage in using the custom vectorized version over
> what GCC generates.
>
> If you have any questions, let me know.
>
> Kind regards,
> Martin
>
>
> ________________________________
> From: Junjie Chen <[email protected]>
> Sent: Friday, November 8, 2019 2:56:48 AM
> To: [email protected]
> Subject: Re: [VOTE] Add BYTE_STREAM_SPLIT encoding to Apache Parquet
>
> +1 from me to add BYTE_STREAM_SPLIT to parquet-format.
>
> Gabor Szadovszky <[email protected]> 于2019年11月7日周四 下午6:07写道:
> >
> > +1 for adding BYTE_STREAM_SPLIT encoding to parquet-format.
> >
> > On Tue, Nov 5, 2019 at 11:22 PM Wes McKinney <[email protected]>
> wrote:
> >
> > > +1 from me on adding the FP encoding
> > >
> > > On Sat, Nov 2, 2019 at 4:51 AM Radev, Martin <[email protected]>
> wrote:
> > > >
> > > > Hello all,
> > > >
> > > >
> > > > thanks for the vote Ryan and to Wes for the feedback.
> > > >
> > > >
> > > > The concern with regards to adding more complex features in the
> Parquet
> > > spec is valid.
> > > >
> > > > However, the proposed encoding is very simple and I already have
> > > unpolished patches for both parquet-mr and arrow.
> > > >
> > > > In its design I purposely opted for something simple to guarantee 1)
> > > good compression speed and 2) ease of implementation.
> > > >
> > > >
> > > > On the topic of testing, I added four more test cases which were
> taken
> > > from here<https://sdrbench.github.io/>. I also added the size in MB of
> > > all test case and entropy per element.
> > > >
> > > > Having the entropy reported helps show that the encoding performs
> better
> > > than any other option for high-entropy data and not so well for
> low-entropy
> > > data.
> > > >
> > > >
> > > > I would be happy to receive some more feedback and votes.
> > > >
> > > >
> > > > Kind regards,
> > > >
> > > > Martin
> > > >
> > > > ________________________________
> > > > From: Ryan Blue <[email protected]>
> > > > Sent: Friday, November 1, 2019 6:28 PM
> > > > To: Parquet Dev
> > > > Cc: Raoofy, Amir; Karlstetter, Roman
> > > > Subject: Re: [VOTE] Add BYTE_STREAM_SPLIT encoding to Apache Parquet
> > > >
> > > > I'm +1 for adding the definition of BYTE_STREAM_SPLIT to the format.
> > > Looks
> > > > like it is simple and performs well. We could use a good floating
> point
> > > > encoding.
> > > >
> > > > I don't think I agree that differences in features between the Java
> and
> > > CPP
> > > > implementations should hold back new work. It would be great to have
> more
> > > > testing and validation, as well as more thorough implementations.
> But I
> > > > don't think we shouldn't accept contributions like this because of
> those
> > > > concerns.
> > > >
> > > > On Fri, Nov 1, 2019 at 9:27 AM Wes McKinney <[email protected]>
> wrote:
> > > >
> > > > > I have to say I'm struggling with piling more things into the
> Parquet
> > > > > specification when we already have a significant implementation
> > > > > shortfall in other areas. LZ4 is still not properly implemented for
> > > > > example, and then there is the question of the V2 encodings and
> data
> > > > > page formats.
> > > > >
> > > > > I'm generally in favor of adding more efficient storage of floating
> > > > > point data, but will it actually be implemented broadly? Parquet
> as a
> > > > > format already has become an "implementation swamp" where any two
> > > > > implementations may not be compatible with each other,
> particularly in
> > > > > consideration of more advanced features.
> > > > >
> > > > > For a single organization using a single implementation, having
> > > > > advanced features may be useful, so I see the benefits to users
> that
> > > > > tightly control what code and what settings to use.
> > > > >
> > > > > On Thu, Oct 31, 2019 at 3:51 AM Radev, Martin <[email protected]
> >
> > > wrote:
> > > > > >
> > > > > > Dear all,
> > > > > >
> > > > > >
> > > > > > would there be any interest in reviewing the BYTE_STREAM_SPLIT
> > > encoding?
> > > > > >
> > > > > > Please feel free to contact me directly if you need help or would
> > > like
> > > > > to provide more test data.
> > > > > >
> > > > > >
> > > > > > Results for the encoding based on the implementation in Arrow are
> > > here:
> > > > > https://github.com/martinradev/arrow-fp-compression-bench
> > > > > > Patch to Arrow is here:
> > > > >
> > >
> https://github.com/martinradev/arrow/commit/10de1e0f8a513b742edddeb6ba0d553617b1aa49
> > > > > >
> > > > > >
> > > > > > The new encoding combined with a compressor performs better than
> any
> > > of
> > > > > the other alternatives for data where there is little change in the
> > > > > upper-most bytes of fp32 and fp64 values. My early experiments also
> > > show
> > > > > that this encoding+zstd performs better on average than any of the
> > > > > specialized floating-point lossless compressors like fpc, spdp,
> zfp.
> > > > > >
> > > > > >
> > > > > > Regards,
> > > > > >
> > > > > > Martin
> > > > > >
> > > > > > ________________________________
> > > > > > From: Radev, Martin <[email protected]>
> > > > > > Sent: Thursday, October 10, 2019 2:34:15 PM
> > > > > > To: Parquet Dev
> > > > > > Cc: Raoofy, Amir; Karlstetter, Roman
> > > > > > Subject: Re: [VOTE] Add BYTE_STREAM_SPLIT encoding to Apache
> Parquet
> > > > > >
> > > > > > Dear Ryan Blue and other Parquet developers,
> > > > > >
> > > > > > I tested Ryan's proposal for modifying the encoding.
> > > > > >
> > > > > > The short answer is that it doesn't perform well in my tests. The
> > > > > encoding, code and results can be viewed below.
> > > > > >
> > > > > >
> > > > > > The current implementation only handles 32-bit IEEE754 floats in
> the
> > > > > following way:
> > > > > >
> > > > > >   1.  For each block of 128 values, the min and max is computed
> for
> > > the
> > > > > exponent
> > > > > >   2.  The number of bits for the exponent RLE is computed as
> > > > > ceil(log2((max - min + 1))). The sign bit uses 1 bit.
> > > > > >   3.  The sign, exponent and 23 remaining mantissa bits are
> > > extracted.
> > > > > >   4.  One RLE encoder is used for the sign and one for the
> exponent.
> > > > > > A new RLE encoder for the exponent is created if the block
> requires
> > > less
> > > > > or more bits than the number of bits used for the current encoder.
> > > > > > The 23 mantissa bits are divided into three streams. (Not sure
> > > whether
> > > > > this is strictly a good idea).
> > > > > >   5.  Also, for each 128 values we need to store 2 bytes: the min
> > > value
> > > > > and the number of bits used by the RLE.
> > > > > >
> > > > > >
> > > > > > I did not implement a decoder and have not added unit tests to
> > > guarantee
> > > > > that the implementation is sound.
> > > > > >
> > > > > > Ryan, can you please review the implementation as to whether it
> > > > > corresponds to what you had in mind?
> > > > > > Check FPByteStreamSplitComponentRLEEncoder. Please do not focus
> on
> > > the
> > > > > code quality - this is only a quick hack.
> > > > > >
> > > > >
> > >
> https://github.com/martinradev/arrow/commit/7c1cc8b2a5ff9e6288c615c2acc44b1dce1bd773#diff-47fe879cb9baad6c633c55f0a34a09c3R979
> > > > > >
> > > > > > In my benchmark tests I compared the following scenarios:
> > > > > >
> > > > > >   *   dictionary
> > > > > >   *   plain encoding + ZSTD
> > > > > >   *   the StreamSplit+RLE implementation above
> > > > > >   *   the StreamSplit+RLE implementation above + ZSTD
> > > > > >   *   the original BYTE_STREAM_SPLIT proposal + ZSTD
> > > > > >
> > > > > > Size of parquet files, measured in MB, for each combination:
> > > > > >
> > > > > >         Plain   Plain+ZSTD      Dict    Split+RLE
> > >  Split+RLE+ZSTD
> > > > > StreamSplit+ZSTD
> > > > > > msg_bt.sp
> > > > > >         128     112     128     113     93      84
> > > > > > msg_lu.sp
> > > > > >         93      87      94      80      73      67
> > > > > > msg_sp.sp
> > > > > >         139     125     139     123     96      88
> > > > > > msg_sweep3d.sp
> > > > > >         60      19      60      47      40      13
> > > > > > num_brain.sp
> > > > > >         68      60      69      55      54      49
> > > > > > num_comet.sp
> > > > > >         52      45      50      46      42      38
> > > > > > num_control.sp
> > > > > >         77      71      77      70      69      63
> > > > > > num_plasma.sp
> > > > > >         17      2       8       16      8       1
> > > > > > obs_error.sp
> > > > > >         30      24      30      25      22      21
> > > > > > obs_info.sp
> > > > > >         10      8       10      8       7       7
> > > > > > obs_spitzer.sp
> > > > > >         95      83      95      99      82      72
> > > > > > obs_temp.sp
> > > > > >         20      18      20      18      18      16
> > > > > >
> > > > > >
> > > > > > I have not tested the encoding on any of the other test data we
> have
> > > > > since they contain also FP64 columns. I did not add support for
> FP64
> > > in the
> > > > > StreamSplit+RLE encoding to save on time and also because I do not
> > > expect
> > > > > much improvement.
> > > > > >
> > > > > >
> > > > > > From the results it can be seen that the proposed StreamSplit+RLE
> > > > > encoding does not improve results.
> > > > > >
> > > > > > Using RLE for the sign bits and exponent obfuscates the input
> and the
> > > > > compression step cannot fully take advantage of repetitions in the
> data
> > > > > since they were removed from the RLE step. Repetitive patterns are
> > > replaced
> > > > > by the RLE bits which likely do not compress very well.
> > > > > >
> > > > > > Also, GZIP/ZSTD handle repetitions in data better on average. For
> > > > > example, GZIP's Deflate algorithm can encode a long run length
> with 3
> > > > > bytes(not sure whether it can be less?) for the raw data + 3 bytes
> for
> > > the
> > > > > reference ( 8 bits + 15 bits + 2 bits ).
> > > > > >
> > > > > > Now, the RLE step might produce better results for long runs of
> the
> > > same
> > > > > value. However, compressors also handles more complex cases when we
> > > have a
> > > > > pattern in the data which doesn't necessary have a long run length.
> > > Also,
> > > > > compressors like GZIP/ZSTD often do entropy-coding-aware parsing (
> > > > > http://cbloomrants.blogspot.com/2008/10/10-10-08-7_10.html ,
> > > > cbloom rants: 10-10-08 : On LZ Optimal Parsing<
> > > http://cbloomrants.blogspot.com/2008/10/10-10-08-7_10.html>
> > > > cbloomrants.blogspot.com
> > > > 10-10-08 On LZ Optimal Parsing So the LZ-Huffman I've done for
> RAD/Oodle
> > > does some new stuff with optimal parsing. I want to write...
> > > >
> > > >
> > > >
> > > > >
> > >
> https://martinradev.github.io/jekyll/update/2019/05/29/writing-a-pe32-x86-exe-packer.html
> > > > > ).
> > > > > >
> > > > > > The proposed RLE encoding+ZSTD is slower than
> BYTE_STREAM_SPLIT+ZSTD.
> > > > > The reason is that BYTE_STREAM_SPLIT only does a scattered memcpy
> > > where as
> > > > > the new RLE encoding has to extract the components and run through
> each
> > > > > block of 128 values twice - once to compute min and max, and once
> to
> > > > > encode. There's also the overhead of using the Arrow RLEEncoder.
> > > > > >
> > > > > > Ryan and other folks, can you provide feedback? Does the
> > > implementation
> > > > > look reasonable to you?
> > > > > >
> > > > > > Can somebody please work with me on this new encoding? There has
> been
> > > > > some interest and some discussions but it hasn't been pushed likely
> > > due to
> > > > > work around the current release.
> > > > > > For a bit more discussions and results, please refer to:
> > > > > > Recent benchmark of Arrow implementation:
> > > > > https://github.com/martinradev/arrow-fp-compression-bench
> > > > > > Separate report:
> > > > >
> > >
> https://drive.google.com/file/d/1wfLQyO2G5nofYFkS7pVbUW0-oJkQqBvv/view?usp=sharing
> > > > [
> > >
> https://lh3.googleusercontent.com/0Nyayc6yUgH07IH12mpd3FJ8OZ7MX282uaxarQ0ffc5sJT_-hiMR5aw60Yg=w1200-h630-p
> > > ]<
> > >
> https://drive.google.com/file/d/1wfLQyO2G5nofYFkS7pVbUW0-oJkQqBvv/view?usp=sharing
> > > >
> > > >
> > > > report.pdf - Google Drive<
> > >
> https://drive.google.com/file/d/1wfLQyO2G5nofYFkS7pVbUW0-oJkQqBvv/view?usp=sharing
> > > >
> > > > drive.google.com
> > > >
> > > >
> > > >
> > > > > >
> > > > > > Regards,
> > > > > > Martin
> > > > > >
> > > > > >
> > > > > >
> > > > > > ________________________________
> > > > > > From: Ryan Blue <[email protected]>
> > > > > > Sent: Thursday, September 19, 2019 7:54 PM
> > > > > > To: Radev, Martin
> > > > > > Cc: Parquet Dev; Raoofy, Amir; Karlstetter, Roman
> > > > > > Subject: Re: [VOTE] Add BYTE_STREAM_SPLIT encoding to Apache
> Parquet
> > > > > >
> > > > > > Sounds good, thanks for working on this!
> > > > > >
> > > > > > On Thu, Sep 19, 2019 at 6:10 AM Radev, Martin <
> [email protected]
> > > > > <mailto:[email protected]>> wrote:
> > > > > >
> > > > > > Hello Ryan,
> > > > > >
> > > > > >
> > > > > > we decided that it would be beneficial to try out your proposal.
> > > > > >
> > > > > >
> > > > > > I will look into it and provide measurements on the compression
> ratio
> > > > > and speed.
> > > > > >
> > > > > >
> > > > > > Regards,
> > > > > >
> > > > > > Martin
> > > > > >
> > > > > > ________________________________
> > > > > > From: Ryan Blue <[email protected]<mailto:[email protected]>>
> > > > > > Sent: Saturday, September 14, 2019 2:23:20 AM
> > > > > > To: Radev, Martin
> > > > > > Cc: Parquet Dev; Raoofy, Amir; Karlstetter, Roman
> > > > > > Subject: Re: [VOTE] Add BYTE_STREAM_SPLIT encoding to Apache
> Parquet
> > > > > >
> > > > > > > Using RLE for the sign, exponents and the top-most mantissa
> bytes
> > > can
> > > > > help when data is repetitive and make it worse for other.
> > > > > >
> > > > > > I agree. But we use RLE in similar cases because we do tend to
> have
> > > runs
> > > > > of values, and values that fit in a fixed number of bits.
> Exponents and
> > > > > sign bits would probably fit this model extremely well most of the
> > > time if
> > > > > you have similar floating point values or sorted values. It would
> be
> > > really
> > > > > interesting to see how well this performs in comparison to the
> > > compression
> > > > > tests you've already done. For mantissa bits, I agree it wouldn't
> be
> > > worth
> > > > > encoding first.
> > > > > >
> > > > > > On Thu, Sep 12, 2019 at 2:56 AM Radev, Martin <
> [email protected]
> > > > > <mailto:[email protected]>> wrote:
> > > > > >
> > > > > > Hello Ryan, Wes and other parquet devs,
> > > > > >
> > > > > >
> > > > > > thanks for the response. I was away on vacation and that's why I
> am
> > > > > answering just now.
> > > > > >
> > > > > >
> > > > > > > whether you think adding run-length encoding to any of the byte
> > > > > streams would be beneficial before applying Zstd.
> > > > > > The short answer is "only for some cases but it will make it
> worse in
> > > > > both compression ratio and speed for other".
> > > > > >
> > > > > > Our initial investigation also separated the sign, exponent and
> > > mantissa
> > > > > into separate streams.
> > > > > >
> > > > > > The encoding was the following assuming 32-bit IEEE754:
> > > > > >
> > > > > > - stream of sign bits
> > > > > >
> > > > > > - stream of exponents bits. Conveniently the exponent for a
> 32-bit
> > > > > IEEE754 number is 8 bits.
> > > > > >
> > > > > > - separate the remaining 23 bits into four streams of 8, 8, 7
> bits.
> > > An
> > > > > extra zero bit is added to the block which has only seven bits.
> This
> > > was
> > > > > done since zstd, zlib, etc work at a byte granularity and we would
> want
> > > > > repetitions to happen at such.
> > > > > >
> > > > > > For 64-bit IEEE754 even more padding has to be added since the
> > > exponent
> > > > > is 11 bits and the mantissa is 52 bits. Thus, we have to add 5 more
> > > > > exponent bits and 4 more mantissa bits to keep repetitions at a
> byte
> > > > > granularity. My original report shows results for when the
> > > floating-point
> > > > > values are split at a component granularity. Report is here:
> > > > >
> https://drive.google.com/file/d/1wfLQyO2G5nofYFkS7pVbUW0-oJkQqBvv/view
> > > > > > Results are just slightly better in terms of compression ratio
> for
> > > some
> > > > > tests but compression and decompression speed is expectedly worse.
> The
> > > > > reason is that splitting a value is somewhat more complex. We need
> to
> > > keep
> > > > > a stream of bits for the signs, keep track of when a byte in the
> > > stream is
> > > > > exhausted, do bit manipulation to extract components, etc. This is
> > > also the
> > > > > reason why I preferred to go with the byte-wise decomposition of
> the
> > > > > values. It's faster and the compression ratio is just slightly
> worse
> > > for
> > > > > some of the tests.
> > > > > >
> > > > > >
> > > > > > Using RLE for the sign, exponents and the top-most mantissa
> bytes can
> > > > > help when data is repetitive and make it worse for other. I suppose
> > > using
> > > > > one of the compressors yields a better compression ratio on
> average.
> > > Also,
> > > > > this can again make encoding and decoding slower.
> > > > > >
> > > > > >
> > > > > > The design of the BYTE_STREAM_SPLIT encoding had in mind two
> things:
> > > > > >
> > > > > > - It would only make data more compressible and leave
> compression to
> > > the
> > > > > codec in use.
> > > > > >   This leaves the complexity to the codec and choice of
> > > > > speed/compression ratio to the user.
> > > > > >
> > > > > > - It should be fast.
> > > > > >   There's an extra compression step so preferably there's very
> little
> > > > > latency before it.
> > > > > >
> > > > > > @Wes, can you have a look?
> > > > > >
> > > > > > More opinions are welcome.
> > > > > >
> > > > > > If you have floating point data available, I would be very happy
> to
> > > > > examine whether this approach offers benefit for you.
> > > > > >
> > > > > >
> > > > > > Regards,
> > > > > >
> > > > > > Martin
> > > > > >
> > > > > > ________________________________
> > > > > > From: Ryan Blue <[email protected]>
> > > > > > Sent: Tuesday, September 3, 2019 11:51:46 PM
> > > > > > To: Parquet Dev
> > > > > > Cc: Raoofy, Amir; Karlstetter, Roman
> > > > > > Subject: Re: [VOTE] Add BYTE_STREAM_SPLIT encoding to Apache
> Parquet
> > > > > >
> > > > > > Hi Martin,
> > > > > >
> > > > > > Thanks for taking a look at this! I agree that the approach here
> > > looks
> > > > > > promising. We've had occasional requests for lossy floating point
> > > > > > compression in the past, so it would be good to add this.
> > > > > >
> > > > > > I did some work in this area a few years ago that is similar and
> I'd
> > > like
> > > > > > to hear what you think about that approach compared to this one.
> That
> > > > > work
> > > > > > was based on the same observation, that the main problem is the
> > > mantissa,
> > > > > > while exponents tend to compress well. What I did was take the
> > > exponent
> > > > > and
> > > > > > mantissa and encode each separately, like the component encoding
> in
> > > your
> > > > > > test. But to encode each stream, I used Parquet's RLE encoder
> > > instead of
> > > > > > just applying compression. This seemed to work well for
> exponents and
> > > > > sign
> > > > > > bits, but probably isn't worth the cost for mantissa bits. It
> could
> > > also
> > > > > be
> > > > > > interesting to test a separate stream for sign bits.
> > > > > >
> > > > > > I guess what I'd like to hear your take on is whether you think
> > > adding
> > > > > > run-length encoding to any of the byte streams would be
> beneficial
> > > before
> > > > > > applying Zstd.
> > > > > >
> > > > > > Thanks!
> > > > > >
> > > > > > rb
> > > > > >
> > > > > > On Tue, Sep 3, 2019 at 12:30 PM Wes McKinney <
> [email protected]
> > > > > <mailto:[email protected]>> wrote:
> > > > > >
> > > > > > > I'm interested in this. I have been busy the last couple of
> weeks
> > > so
> > > > > have
> > > > > > > not been able to take a closer look. I will try to give some
> > > feedback
> > > > > this
> > > > > > > week.
> > > > > > >
> > > > > > > Thanks
> > > > > > >
> > > > > > > On Tue, Sep 3, 2019, 2:17 PM Radev, Martin <
> [email protected]
> > > > > <mailto:[email protected]>> wrote:
> > > > > > >
> > > > > > > > Hello all,
> > > > > > > >
> > > > > > > >
> > > > > > > > thank you Julien for the interest.
> > > > > > > >
> > > > > > > >
> > > > > > > > Could other people, part of Apache Parquet, share their
> opinions?
> > > > > > > >
> > > > > > > > Do you have your own data which you would like to use for
> testing
> > > > > the new
> > > > > > > > encoding?
> > > > > > > >
> > > > > > > >
> > > > > > > > Regards,
> > > > > > > >
> > > > > > > > Martin
> > > > > > > >
> > > > > > > > ________________________________
> > > > > > > > From: Julien Le Dem <[email protected]>
> > > > > > > > Sent: Friday, August 30, 2019 2:38:37 AM
> > > > > > > > To: [email protected]<mailto:[email protected]>
> > > > > > > > Cc: Raoofy, Amir; Karlstetter, Roman
> > > > > > > > Subject: Re: [VOTE] Add BYTE_STREAM_SPLIT encoding to Apache
> > > Parquet
> > > > > > > >
> > > > > > > > I think this looks promising to me. At first glance it seems
> > > > > combining
> > > > > > > > simplicity and efficiency.
> > > > > > > > I'd like to hear more from other members of the PMC.
> > > > > > > >
> > > > > > > > On Tue, Aug 27, 2019 at 5:30 AM Radev, Martin <
> > > [email protected]
> > > > > <mailto:[email protected]>>
> > > > > > > wrote:
> > > > > > > >
> > > > > > > > > Dear all,
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > there was some earlier discussion on adding a new encoding
> for
> > > > > better
> > > > > > > > > compression of FP32 and FP64 data.
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > The pull request which extends the format is here:
> > > > > > > > > https://github.com/apache/parquet-format/pull/144
> > > > > > > > > The change has one approval from earlier from Zoltan.
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > The results from an investigation on compression ratio and
> > > speed
> > > > > with
> > > > > > > the
> > > > > > > > > new encoding vs other encodings is available here:
> > > > > > > > > https://github.com/martinradev/arrow-fp-compression-bench
> > > > > > > > > It is visible that for many tests the new encoding performs
> > > better
> > > > > in
> > > > > > > > > compression ratio and in some cases in speed. The
> improvements
> > > in
> > > > > > > > > compression speed come from the fact that the new format
> can
> > > > > > > potentially
> > > > > > > > > lead to a faster parsing for some compressors like GZIP.
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > An earlier report which examines other FP compressors
> (fpzip,
> > > spdp,
> > > > > > > fpc,
> > > > > > > > > zfp, sz) and new potential encodings is available here:
> > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > >
> > >
> https://drive.google.com/file/d/1wfLQyO2G5nofYFkS7pVbUW0-oJkQqBvv/view?usp=sharing
> > > > > > > > > The report also covers lossy compression but the
> > > BYTE_STREAM_SPLIT
> > > > > > > > > encoding only has the focus of lossless compression.
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > Can we have a vote?
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > Regards,
> > > > > > > > >
> > > > > > > > > Martin
> > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > > > --
> > > > > > Ryan Blue
> > > > > > Software Engineer
> > > > > > Netflix
> > > > > >
> > > > > >
> > > > > > --
> > > > > > Ryan Blue
> > > > > > Software Engineer
> > > > > > Netflix
> > > > > >
> > > > > >
> > > > > > --
> > > > > > Ryan Blue
> > > > > > Software Engineer
> > > > > > Netflix
> > > > >
> > > >
> > > >
> > > > --
> > > > Ryan Blue
> > > > Software Engineer
> > > > Netflix
> > >
>

Reply via email to