should not use seek() for skipping very small column chunks. better to read and ignore data.
Mantenedores costumam responder em até 4 dias
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 4/5
- Tempo estimado
- 3-5 dias
- Facilidade para iniciantes
- 45/100
- Tipo de issue
- Funcionalidade
- Clareza
- Razoavelmente clara
- Status de atividade
- Estagnada
- Stack de tecnologia
- hadoop, java
- Domínio
- data-engineering
Direção de pesquisa
Comece em org.apache.parquet.hadoop.ParquetFileReader#internalReadRowGroup e rastreie como ConsecutivePartList é construído antes de readAllPartsVectoredOrNormal. Use Hadoop FileSystem#minSeekForVectorReads como o limite para avaliar lacunas pequenas e, em seguida, verifique se os chunks de coluna selecionados continuam sendo carregados enquanto as lacunas pequenas são lidas dentro dos intervalos circundantes, em vez de causarem seeks separados.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
Describe the enhancement requested
When reading some column chunks but not all, parquet is building a list of "ConsecutivePartList", then trying to call the Hadoop api for vectorized reader of FSDataInputStream#readVectored(List ...)
Unfortunatly, many implementations of "FSDataInputStream" do not override the readVectored() method, which trigger many distinct calls to read.
For example on hadoop-azure, the Azure Datalake Storage is much slower at establishing a new Https connection (using infamous calls HttpURLConnection for jdk 1.0, then doing TLS hand-shake), that to get only few more megas of data on an existing socket !!
The case with small wholes to avoid reading is very frequent when having columns in parquet files that are not read, and are highly compressed because of RLE encoding. Typically, a very sparse column with only few values, or even always null within a page. Such a column could be encoded in only few hundred of bytes by parquet, so it is NOT a problem of reading 100 bytes more.
Parquet should at least honor the following method from hadoop class FileSystem, that says that a seek of less than 4096 bytes is NOT reasonable.
/**
* What is the smallest reasonable seek?
* @return the minimum number of bytes
*/
default int minSeekForVectorReads() {
return 4 * 1024;
}
The logic for building this List for a list of column chunks is here:
org.apache.parquet.hadoop.ParquetFileReader#internalReadRowGroup
private ColumnChunkPageReadStore internalReadRowGroup(int blockIndex) throws IOException {
...
for (ColumnChunkMetaData mc : block.getColumns()) {
...
// first part or not consecutive => new list
if (currentParts == null || currentParts.endPos() != startingPos) { // <===== SHOULD honor minSeekForVectorReads()
currentParts = new ConsecutivePartList(startingPos);
allParts.add(currentParts);
}
currentParts.addChunk(new ChunkDescriptor(columnDescriptor, mc, startingPos, mc.getTotalSize()));
}
}
// actually read all the chunks
ChunkListBuilder builder = new ChunkListBuilder(block.getRowCount());
readAllPartsVectoredOrNormal(allParts, builder);
rowGroup.setReleaser(builder.releaser);
for (Chunk chunk : builder.build()) {
readChunkPages(chunk, block, rowGroup);
}
return rowGroup;
}
maybe a possible implementation could be to add fictive "ConsecutivePartList" that are to be ignored while receiving the data, but that would avoid having some wholes in the ranges to read.
Component(s)
No response
- Linguagem predominante
- Java
- Estrelas
- 3.1k
- Forks
- 1.6k
- Merge médio
- 5d 13h
- PRs com merge (30d)
- 31
Preparar o ambiente
- Sem Dockerfile nem arquivo Docker Compose
- Tem um modelo de pull request
- Sem guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de apache/parquet-java
-
Row-group copying collides for distinct column paths with the same dot stringTalvez já em andamento @costas-db assumiu há 20 dias. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 74/100
apache/parquet-java#3829 ·
Mantenedores costumam responder em até 4 dias
-
Binary statistics truncation test ignores its configured truncation lengthTalvez já em andamento @dhruv-15-03 assumiu há 21 dias. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 88/100
apache/parquet-java#3820 ·
Mantenedores costumam responder em até 4 dias
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 82/100
apache/parquet-java#3767 ·
Mantenedores costumam responder em até 4 dias
-
Remove duplicate LICENSE and NOTICE files from benchmark JARsTalvez já em andamento @efegokdemir assumiu há 25 dias. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
apache/parquet-java#3695 · 1 comentário ·
Mantenedores costumam responder em até 4 dias
-
null_count is omitted for large columns in parquet filesTalvez já em andamento @efegokdemir assumiu há 23 dias. AbertaType: bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
apache/parquet-java#3574 · 1 comentário ·
Mantenedores costumam responder em até 4 dias
Todas as issues de apache/parquet-java
Issues semelhantes
-
NullPointerException when a `DeserializationProblemHandler` returns `null` for `byte[]` (single value unwrapped) and `char[]` elementsTalvez já em andamento @Marti2203 assumiu hoje. Aberta
Dificuldade 2/5 Meio dia Facilidade para iniciantes 88/100
FasterXML/jackson-databind#6300 ·
Mantenedores costumam responder em até 1 dia
-
content good first issue
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 95/100
cpinitiative/usaco-guide#6699 ·
Mantenedores costumam responder em até 1 dia
-
BC remittance upload: a claim MSP refused (S03) is saved with a blank status instead of refused (F)Abertatype: bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 88/100
carlos-emr/carlos#4933 ·
Mantenedores costumam responder em até 1 dia
-
bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 82/100
apache/rocketmq-dashboard#6925 ·
Mantenedores costumam responder em até 3 dias
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
Vakore/ZappierGames#147 ·