[ 
https://issues.apache.org/jira/browse/PARQUET-2260?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17703056#comment-17703056
 ] 

ASF GitHub Bot commented on PARQUET-2260:
-----------------------------------------

wgtmac commented on code in PR #1043:
URL: https://github.com/apache/parquet-mr/pull/1043#discussion_r1142942382


##########
parquet-column/src/main/java/org/apache/parquet/column/impl/ColumnWriterBase.java:
##########
@@ -97,7 +97,7 @@ abstract class ColumnWriterBase implements ColumnWriter {
       int optimalNumOfBits = 
BlockSplitBloomFilter.optimalNumOfBits(ndv.getAsLong(), fpp.getAsDouble());
       this.bloomFilter = new BlockSplitBloomFilter(optimalNumOfBits / 8, 
maxBloomFilterSize);
     } else {
-      this.bloomFilter = new BlockSplitBloomFilter(maxBloomFilterSize);
+      this.bloomFilter = BlockSplitBloomFilter.of(maxBloomFilterSize);

Review Comment:
   OK, I got your point. According to the delegate constructor below, 
`LOWER_BOUND_BYTES` and `UPPER_BOUND_BYTES` are hard limits. What about 
checking if `minimumBytes` and `maximumBytes` are power of two and throw if not?
   
   ```java
     public BlockSplitBloomFilter(int numBytes, int minimumBytes, int 
maximumBytes, HashStrategy hashStrategy) {
       if (minimumBytes > maximumBytes) {
         throw new IllegalArgumentException("the minimum bytes should be less 
or equal than maximum bytes");
       }
   
       if (minimumBytes > LOWER_BOUND_BYTES && minimumBytes < 
UPPER_BOUND_BYTES) {
         this.minimumBytes = minimumBytes;
       }
   
       if (maximumBytes > LOWER_BOUND_BYTES && maximumBytes < 
UPPER_BOUND_BYTES) {
         this.maximumBytes = maximumBytes;
       }
   
       initBitset(numBytes);
   
       cacheBuffer.order(ByteOrder.LITTLE_ENDIAN);
   
       switch (hashStrategy) {
         case XXH64:
           this.hashStrategy = hashStrategy;
           hashFunction = new XxHash();
           break;
         default:
           throw new RuntimeException("Unsupported hash strategy");
       }
     }
   ``` 





>  Bloom filter bytes size shouldn't be larger than maxBytes size in the 
> configuration
> ------------------------------------------------------------------------------------
>
>                 Key: PARQUET-2260
>                 URL: https://issues.apache.org/jira/browse/PARQUET-2260
>             Project: Parquet
>          Issue Type: Bug
>            Reporter: Mars
>            Assignee: Mars
>            Priority: Major
>
> Before this PR: If {{parquet.bloom.filter.max.bytes}} configuration is not a 
> power of 2 value, the size of the bloom filter generated will exceed this 
> value. For example, now if set {{parquet.bloom.filter.max.bytes}} as 1024 * 
> 1024+1= 1048577 , the bytes size of bloom filter generated will be 1024 * 
> 1024 * 2 = 2097152. This does not match the definition of the parameter
> After this PR: set this value to the largest power of two less than 
> {{parquet.bloom.filter.max.bytes}} and It should be 1024 * 1024



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

Reply via email to