org.apache.parquet.ParquetReadOptions Java Examples
The following examples show how to use
org.apache.parquet.ParquetReadOptions.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: ParquetFileReader.java From parquet-mr with Apache License 2.0 | 6 votes |
public ParquetFileReader(InputFile file, ParquetReadOptions options) throws IOException { this.converter = new ParquetMetadataConverter(options); this.file = file; this.f = file.newStream(); this.options = options; try { this.footer = readFooter(file, options, f, converter); } catch (Exception e) { // In case that reading footer throws an exception in the constructor, the new stream // should be closed. Otherwise, there's no way to close this outside. f.close(); throw e; } this.fileMetaData = footer.getFileMetaData(); this.blocks = filterRowGroups(footer.getBlocks()); this.blockIndexStores = listWithNulls(this.blocks.size()); this.blockRowRanges = listWithNulls(this.blocks.size()); for (ColumnDescriptor col : footer.getFileMetaData().getSchema().getColumns()) { paths.put(ColumnPath.get(col.getPath()), col); } this.crc = options.usePageChecksumVerification() ? new CRC32() : null; }
Example #2
Source File: ParquetReader.java From parquet-mr with Apache License 2.0 | 6 votes |
public ParquetReader<T> build() throws IOException { ParquetReadOptions options = optionsBuilder.build(); if (path != null) { FileSystem fs = path.getFileSystem(conf); FileStatus stat = fs.getFileStatus(path); if (stat.isFile()) { return new ParquetReader<>( Collections.singletonList((InputFile) HadoopInputFile.fromStatus(stat, conf)), options, getReadSupport()); } else { List<InputFile> files = new ArrayList<>(); for (FileStatus fileStatus : fs.listStatus(path, HiddenFileFilter.INSTANCE)) { files.add(HadoopInputFile.fromStatus(fileStatus, conf)); } return new ParquetReader<T>(files, options, getReadSupport()); } } else { return new ParquetReader<>(Collections.singletonList(file), options, getReadSupport()); } }
Example #3
Source File: ParquetInputFormat.java From flink with Apache License 2.0 | 5 votes |
@Override public void open(FileInputSplit split) throws IOException { // reset the flag when open a new split this.skipThisSplit = false; org.apache.hadoop.conf.Configuration configuration = new org.apache.hadoop.conf.Configuration(); InputFile inputFile = HadoopInputFile.fromPath(new org.apache.hadoop.fs.Path(split.getPath().toUri()), configuration); ParquetReadOptions options = ParquetReadOptions.builder().build(); ParquetFileReader fileReader = new ParquetFileReader(inputFile, options); MessageType fileSchema = fileReader.getFileMetaData().getSchema(); MessageType readSchema = getReadSchema(fileSchema, split.getPath()); if (skipThisSplit) { LOG.warn(String.format( "Escaped the file split [%s] due to mismatch of file schema to expected result schema", split.getPath().toString())); } else { this.parquetRecordReader = new ParquetRecordReader<>(new RowReadSupport(), readSchema, filterPredicate == null ? FilterCompat.NOOP : FilterCompat.get(filterPredicate)); this.parquetRecordReader.initialize(fileReader, configuration); this.parquetRecordReader.setSkipCorruptedRecord(this.skipCorruptedRecord); if (this.recordConsumed == null) { this.recordConsumed = getRuntimeContext().getMetricGroup().counter("parquet-records-consumed"); } LOG.debug(String.format("Open ParquetInputFormat with FileInputSplit [%s]", split.getPath().toString())); } }
Example #4
Source File: ParquetRecordReader.java From parquet-mr with Apache License 2.0 | 5 votes |
private void initializeInternalReader(ParquetInputSplit split, Configuration configuration) throws IOException { Path path = split.getPath(); long[] rowGroupOffsets = split.getRowGroupOffsets(); // if task.side.metadata is set, rowGroupOffsets is null ParquetReadOptions.Builder optionsBuilder = HadoopReadOptions.builder(configuration); if (rowGroupOffsets != null) { optionsBuilder.withOffsets(rowGroupOffsets); } else { optionsBuilder.withRange(split.getStart(), split.getEnd()); } // open a reader with the metadata filter ParquetFileReader reader = ParquetFileReader.open( HadoopInputFile.fromPath(path, configuration), optionsBuilder.build()); if (rowGroupOffsets != null) { // verify a row group was found for each offset List<BlockMetaData> blocks = reader.getFooter().getBlocks(); if (blocks.size() != rowGroupOffsets.length) { throw new IllegalStateException( "All of the offsets in the split should be found in the file." + " expected: " + Arrays.toString(rowGroupOffsets) + " found: " + blocks); } } if (!reader.getRowGroups().isEmpty()) { checkDeltaByteArrayProblem( reader.getFooter().getFileMetaData(), configuration, reader.getRowGroups().get(0)); } internalReader.initialize(reader, configuration); }
Example #5
Source File: UnmaterializableRecordCounter.java From parquet-mr with Apache License 2.0 | 5 votes |
private static float getFloat(ParquetReadOptions options, String key, float defaultValue) { String value = options.getProperty(key); if (value != null) { return Float.valueOf(value); } else { return defaultValue; } }
Example #6
Source File: ParquetFileReader.java From parquet-mr with Apache License 2.0 | 5 votes |
private static final ParquetMetadata readFooter(InputFile file, ParquetReadOptions options, SeekableInputStream f, ParquetMetadataConverter converter) throws IOException { long fileLen = file.getLength(); LOG.debug("File length {}", fileLen); int FOOTER_LENGTH_SIZE = 4; if (fileLen < MAGIC.length + FOOTER_LENGTH_SIZE + MAGIC.length) { // MAGIC + data + footer + footerIndex + MAGIC throw new RuntimeException(file.toString() + " is not a Parquet file (too small length: " + fileLen + ")"); } long footerLengthIndex = fileLen - FOOTER_LENGTH_SIZE - MAGIC.length; LOG.debug("reading footer index at {}", footerLengthIndex); f.seek(footerLengthIndex); int footerLength = readIntLittleEndian(f); byte[] magic = new byte[MAGIC.length]; f.readFully(magic); if (!Arrays.equals(MAGIC, magic)) { throw new RuntimeException(file.toString() + " is not a Parquet file. expected magic number at tail " + Arrays.toString(MAGIC) + " but found " + Arrays.toString(magic)); } long footerIndex = footerLengthIndex - footerLength; LOG.debug("read footer length: {}, footer index: {}", footerLength, footerIndex); if (footerIndex < MAGIC.length || footerIndex >= footerLengthIndex) { throw new RuntimeException("corrupted file: the footer index is not within the file: " + footerIndex); } f.seek(footerIndex); // Read all the footer bytes in one time to avoid multiple read operations, // since it can be pretty time consuming for a single read operation in HDFS. ByteBuffer footerBytesBuffer = ByteBuffer.allocate(footerLength); f.readFully(footerBytesBuffer); LOG.debug("Finished to read all footer bytes."); footerBytesBuffer.flip(); InputStream footerBytesStream = ByteBufferInputStream.wrap(footerBytesBuffer); return converter.readParquetMetadata(footerBytesStream, options.getMetadataFilter()); }
Example #7
Source File: ParquetFileReader.java From parquet-mr with Apache License 2.0 | 5 votes |
/** * Reads the meta data block in the footer of the file using provided input stream * @param file a {@link InputFile} to read * @param filter the filter to apply to row groups * @return the metadata blocks in the footer * @throws IOException if an error occurs while reading the file * @deprecated will be removed in 2.0.0; * use {@link ParquetFileReader#open(InputFile, ParquetReadOptions)} */ @Deprecated public static final ParquetMetadata readFooter(InputFile file, MetadataFilter filter) throws IOException { ParquetReadOptions options; if (file instanceof HadoopInputFile) { options = HadoopReadOptions.builder(((HadoopInputFile) file).getConfiguration()) .withMetadataFilter(filter).build(); } else { options = ParquetReadOptions.builder().withMetadataFilter(filter).build(); } try (SeekableInputStream in = file.newStream()) { return readFooter(file, options, in); } }
Example #8
Source File: ParquetReader.java From parquet-mr with Apache License 2.0 | 5 votes |
private ParquetReader(List<InputFile> files, ParquetReadOptions options, ReadSupport<T> readSupport) throws IOException { this.readSupport = readSupport; this.options = options; this.filesIterator = files.iterator(); }
Example #9
Source File: InternalParquetRecordReader.java From parquet-mr with Apache License 2.0 | 5 votes |
public void initialize(ParquetFileReader reader, ParquetReadOptions options) { // copy custom configuration to the Configuration passed to the ReadSupport Configuration conf = new Configuration(); if (options instanceof HadoopReadOptions) { conf = ((HadoopReadOptions) options).getConf(); } for (String property : options.getPropertyNames()) { conf.set(property, options.getProperty(property)); } // initialize a ReadContext for this file this.reader = reader; FileMetaData parquetFileMetadata = reader.getFooter().getFileMetaData(); this.fileSchema = parquetFileMetadata.getSchema(); Map<String, String> fileMetadata = parquetFileMetadata.getKeyValueMetaData(); ReadSupport.ReadContext readContext = readSupport.init(new InitContext(conf, toSetMultiMap(fileMetadata), fileSchema)); this.columnIOFactory = new ColumnIOFactory(parquetFileMetadata.getCreatedBy()); this.requestedSchema = readContext.getRequestedSchema(); this.columnCount = requestedSchema.getPaths().size(); // Setting the projection schema before running any filtering (e.g. getting filtered record count) // because projection impacts filtering reader.setRequestedSchema(requestedSchema); this.recordConverter = readSupport.prepareForRead(conf, fileMetadata, fileSchema, readContext); this.strictTypeChecking = options.isEnabled(STRICT_TYPE_CHECKING, true); this.total = reader.getFilteredRecordCount(); this.unmaterializableRecordCounter = new UnmaterializableRecordCounter(options, total); this.filterRecords = options.useRecordFilter(); LOG.info("RecordReader initialized will read a total of {} records.", total); }
Example #10
Source File: ParquetRecordReaderTest.java From flink with Apache License 2.0 | 5 votes |
@Test public void testNestedMapGroup() throws IOException { Schema nestedMapSchema = unWrapSchema(NESTED_SCHEMA.getField("nestedMap").schema()); Preconditions.checkState(nestedMapSchema.getType().equals(Schema.Type.MAP)); Schema mapValueSchema = nestedMapSchema.getValueType(); GenericRecord mapValue = new GenericRecordBuilder(mapValueSchema) .set("type", "nested") .set("value", "nested_value").build(); ImmutableMap.Builder<String, GenericRecord> map = ImmutableMap.builder(); map.put("testKey", mapValue); GenericRecord record = new GenericRecordBuilder(NESTED_SCHEMA) .set("nestedMap", map.build()) .set("foo", 34L).build(); Path path = createTempParquetFile(tempRoot.getRoot(), NESTED_SCHEMA, Collections.singletonList(record)); MessageType readSchema = (new AvroSchemaConverter()).convert(NESTED_SCHEMA); ParquetRecordReader<Row> rowReader = new ParquetRecordReader<>(new RowReadSupport(), readSchema); InputFile inputFile = HadoopInputFile.fromPath(new org.apache.hadoop.fs.Path(path.toUri()), testConfig); ParquetReadOptions options = ParquetReadOptions.builder().build(); ParquetFileReader fileReader = new ParquetFileReader(inputFile, options); rowReader.initialize(fileReader, testConfig); assertFalse(rowReader.reachEnd()); Row row = rowReader.nextRecord(); assertEquals(7, row.getArity()); assertEquals(34L, row.getField(0)); Map result = (Map) row.getField(5); Row nestedRow = (Row) result.get("testKey"); assertEquals("nested", nestedRow.getField(0)); assertEquals("nested_value", nestedRow.getField(1)); }
Example #11
Source File: ParquetRecordReaderTest.java From flink with Apache License 2.0 | 5 votes |
@Test public void testMapGroup() throws IOException { Preconditions.checkState(unWrapSchema(NESTED_SCHEMA.getField("spamMap").schema()) .getType().equals(Schema.Type.MAP)); ImmutableMap.Builder<String, String> map = ImmutableMap.builder(); map.put("testKey", "testValue"); GenericRecord record = new GenericRecordBuilder(NESTED_SCHEMA) .set("foo", 32L) .set("spamMap", map.build()) .build(); Path path = createTempParquetFile(tempRoot.getRoot(), NESTED_SCHEMA, Collections.singletonList(record)); MessageType readSchema = (new AvroSchemaConverter()).convert(NESTED_SCHEMA); ParquetRecordReader<Row> rowReader = new ParquetRecordReader<>(new RowReadSupport(), readSchema); InputFile inputFile = HadoopInputFile.fromPath(new org.apache.hadoop.fs.Path(path.toUri()), testConfig); ParquetReadOptions options = ParquetReadOptions.builder().build(); ParquetFileReader fileReader = new ParquetFileReader(inputFile, options); rowReader.initialize(fileReader, testConfig); assertFalse(rowReader.reachEnd()); Row row = rowReader.nextRecord(); assertEquals(7, row.getArity()); assertEquals(32L, row.getField(0)); Map<?, ?> result = (Map<?, ?>) row.getField(1); assertEquals(result.get("testKey").toString(), "testValue"); assertTrue(rowReader.reachEnd()); }
Example #12
Source File: ParquetRecordReaderTest.java From flink with Apache License 2.0 | 5 votes |
@Test public void testReadNestedGroup() throws IOException { Schema schema = unWrapSchema(NESTED_SCHEMA.getField("bar").schema()); GenericData.Record barRecord = new GenericRecordBuilder(schema) .set("spam", 31L).build(); GenericData.Record record = new GenericRecordBuilder(NESTED_SCHEMA) .set("foo", 32L) .set("bar", barRecord) .build(); Path path = createTempParquetFile(tempRoot.getRoot(), NESTED_SCHEMA, Collections.singletonList(record)); MessageType readSchema = (new AvroSchemaConverter()).convert(NESTED_SCHEMA); ParquetRecordReader<Row> rowReader = new ParquetRecordReader<>(new RowReadSupport(), readSchema); InputFile inputFile = HadoopInputFile.fromPath(new org.apache.hadoop.fs.Path(path.toUri()), testConfig); ParquetReadOptions options = ParquetReadOptions.builder().build(); ParquetFileReader fileReader = new ParquetFileReader(inputFile, options); rowReader.initialize(fileReader, testConfig); assertFalse(rowReader.reachEnd()); Row row = rowReader.nextRecord(); assertEquals(7, row.getArity()); assertEquals(32L, row.getField(0)); assertEquals(31L, ((Row) row.getField(2)).getField(0)); assertTrue(rowReader.reachEnd()); }
Example #13
Source File: ParquetRecordReaderTest.java From flink with Apache License 2.0 | 5 votes |
@Test public void testReadMultipleSimpleGroup() throws IOException { Long[] array = {1L}; List<IndexedRecord> records = new ArrayList<>(); for (int i = 0; i < 100; i++) { GenericData.Record record = new GenericRecordBuilder(SIMPLE_SCHEMA) .set("bar", "test") .set("foo", i) .set("arr", array).build(); records.add(record); } Path path = createTempParquetFile(tempRoot.getRoot(), SIMPLE_SCHEMA, records); MessageType readSchema = (new AvroSchemaConverter()).convert(SIMPLE_SCHEMA); ParquetRecordReader<Row> rowReader = new ParquetRecordReader<>(new RowReadSupport(), readSchema); InputFile inputFile = HadoopInputFile.fromPath(new org.apache.hadoop.fs.Path(path.toUri()), testConfig); ParquetReadOptions options = ParquetReadOptions.builder().build(); ParquetFileReader fileReader = new ParquetFileReader(inputFile, options); rowReader.initialize(fileReader, testConfig); assertTrue(!rowReader.reachEnd()); for (long i = 0; i < 100; i++) { assertFalse(rowReader.reachEnd()); Row row = rowReader.nextRecord(); assertEquals(3, row.getArity()); assertEquals(i, row.getField(0)); assertEquals("test", row.getField(1)); assertArrayEquals(array, (Long[]) row.getField(2)); } assertTrue(rowReader.reachEnd()); }
Example #14
Source File: ParquetRecordReaderTest.java From flink with Apache License 2.0 | 5 votes |
@Test public void testReadSimpleGroup() throws IOException { Long[] array = {1L}; GenericData.Record record = new GenericRecordBuilder(SIMPLE_SCHEMA) .set("bar", "test") .set("foo", 32L) .set("arr", array).build(); Path path = createTempParquetFile(tempRoot.getRoot(), SIMPLE_SCHEMA, Collections.singletonList(record)); MessageType readSchema = (new AvroSchemaConverter()).convert(SIMPLE_SCHEMA); ParquetRecordReader<Row> rowReader = new ParquetRecordReader<>(new RowReadSupport(), readSchema); InputFile inputFile = HadoopInputFile.fromPath(new org.apache.hadoop.fs.Path(path.toUri()), testConfig); ParquetReadOptions options = ParquetReadOptions.builder().build(); ParquetFileReader fileReader = new ParquetFileReader(inputFile, options); rowReader.initialize(fileReader, testConfig); assertFalse(rowReader.reachEnd()); Row row = rowReader.nextRecord(); assertEquals(3, row.getArity()); assertEquals(32L, row.getField(0)); assertEquals("test", row.getField(1)); assertArrayEquals(array, (Long[]) row.getField(2)); assertTrue(rowReader.reachEnd()); }
Example #15
Source File: ParquetInputFormat.java From flink with Apache License 2.0 | 5 votes |
@Override public void open(FileInputSplit split) throws IOException { // reset the flag when open a new split this.skipThisSplit = false; org.apache.hadoop.conf.Configuration configuration = new org.apache.hadoop.conf.Configuration(); InputFile inputFile = HadoopInputFile.fromPath(new org.apache.hadoop.fs.Path(split.getPath().toUri()), configuration); ParquetReadOptions options = ParquetReadOptions.builder().build(); ParquetFileReader fileReader = new ParquetFileReader(inputFile, options); MessageType fileSchema = fileReader.getFileMetaData().getSchema(); MessageType readSchema = getReadSchema(fileSchema, split.getPath()); if (skipThisSplit) { LOG.warn(String.format( "Escaped the file split [%s] due to mismatch of file schema to expected result schema", split.getPath().toString())); } else { this.parquetRecordReader = new ParquetRecordReader<>(new RowReadSupport(), readSchema, filterPredicate == null ? FilterCompat.NOOP : FilterCompat.get(filterPredicate)); this.parquetRecordReader.initialize(fileReader, configuration); this.parquetRecordReader.setSkipCorruptedRecord(this.skipCorruptedRecord); if (this.recordConsumed == null) { this.recordConsumed = getRuntimeContext().getMetricGroup().counter("parquet-records-consumed"); } LOG.debug(String.format("Open ParquetInputFormat with FileInputSplit [%s]", split.getPath().toString())); } }
Example #16
Source File: ParquetReader.java From iceberg with Apache License 2.0 | 5 votes |
private static ParquetFileReader newReader(InputFile file, ParquetReadOptions options) { try { return ParquetFileReader.open(ParquetIO.file(file), options); } catch (IOException e) { throw new RuntimeIOException(e, "Failed to open Parquet file: %s", file.location()); } }
Example #17
Source File: ParquetReader.java From iceberg with Apache License 2.0 | 5 votes |
public ParquetReader(InputFile input, Schema expectedSchema, ParquetReadOptions options, Function<MessageType, ParquetValueReader<?>> readerFunc, Expression filter, boolean reuseContainers) { this.input = input; this.expectedSchema = expectedSchema; this.options = options; this.readerFunc = readerFunc; // replace alwaysTrue with null to avoid extra work evaluating a trivial filter this.filter = filter == Expressions.alwaysTrue() ? null : filter; this.reuseContainers = reuseContainers; }
Example #18
Source File: ParquetFileAccessor.java From pxf with Apache License 2.0 | 5 votes |
/** * Reads the original schema from the parquet file. * * @param parquetFile the path to the parquet file * @param fileSplit the file split we are accessing * @return the original schema from the parquet file * @throws IOException when there's an IOException while reading the schema */ private MessageType getSchema(Path parquetFile, FileSplit fileSplit) throws IOException { final long then = System.nanoTime(); ParquetMetadataConverter.MetadataFilter filter = ParquetMetadataConverter.range( fileSplit.getStart(), fileSplit.getStart() + fileSplit.getLength()); ParquetReadOptions parquetReadOptions = HadoopReadOptions .builder(configuration) .withMetadataFilter(filter) .build(); HadoopInputFile inputFile = HadoopInputFile.fromPath(parquetFile, configuration); try (ParquetFileReader parquetFileReader = ParquetFileReader.open(inputFile, parquetReadOptions)) { FileMetaData metadata = parquetFileReader.getFileMetaData(); if (LOG.isDebugEnabled()) { LOG.debug("{}-{}: Reading file {} with {} records in {} RowGroups", context.getTransactionId(), context.getSegmentId(), parquetFile.getName(), parquetFileReader.getRecordCount(), parquetFileReader.getRowGroups().size()); } final long millis = TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - then); LOG.debug("{}-{}: Read schema in {} ms", context.getTransactionId(), context.getSegmentId(), millis); return metadata.getSchema(); } catch (Exception e) { throw new IOException(e); } }
Example #19
Source File: ParquetReader.java From iceberg with Apache License 2.0 | 5 votes |
public ParquetReader(InputFile input, Schema expectedSchema, ParquetReadOptions options, Function<MessageType, ParquetValueReader<?>> readerFunc, NameMapping nameMapping, Expression filter, boolean reuseContainers, boolean caseSensitive) { this.input = input; this.expectedSchema = expectedSchema; this.options = options; this.readerFunc = readerFunc; // replace alwaysTrue with null to avoid extra work evaluating a trivial filter this.filter = filter == Expressions.alwaysTrue() ? null : filter; this.reuseContainers = reuseContainers; this.caseSensitive = caseSensitive; this.nameMapping = nameMapping; }
Example #20
Source File: VectorizedParquetReader.java From iceberg with Apache License 2.0 | 5 votes |
public VectorizedParquetReader( InputFile input, Schema expectedSchema, ParquetReadOptions options, Function<MessageType, VectorizedReader<?>> readerFunc, NameMapping nameMapping, Expression filter, boolean reuseContainers, boolean caseSensitive, int maxRecordsPerBatch) { this.input = input; this.expectedSchema = expectedSchema; this.options = options; this.batchReaderFunc = readerFunc; // replace alwaysTrue with null to avoid extra work evaluating a trivial filter this.filter = filter == Expressions.alwaysTrue() ? null : filter; this.reuseContainers = reuseContainers; this.caseSensitive = caseSensitive; this.batchSize = maxRecordsPerBatch; this.nameMapping = nameMapping; }
Example #21
Source File: ReadConf.java From iceberg with Apache License 2.0 | 5 votes |
private static ParquetFileReader newReader(InputFile file, ParquetReadOptions options) { try { return ParquetFileReader.open(ParquetIO.file(file), options); } catch (IOException e) { throw new RuntimeIOException(e, "Failed to open Parquet file: %s", file.location()); } }
Example #22
Source File: ProtoParquetWriterWithOffsetTest.java From garmadon with Apache License 2.0 | 5 votes |
private void checkFileLatestCommittedTimestamp(Path p, long timestamp) throws IOException { ParquetFileReader reader = new ParquetFileReader( HadoopInputFile.fromPath(p, new Configuration()), ParquetReadOptions.builder().build() ); String actualTimestamp = reader.getFooter().getFileMetaData().getKeyValueMetaData().get(ProtoParquetWriterWithOffset.LATEST_TIMESTAMP_META_KEY); assertThat(actualTimestamp, is(String.valueOf(timestamp))); }
Example #23
Source File: ParquetRecordReaderTest.java From flink with Apache License 2.0 | 5 votes |
@Test public void testReadSimpleGroup() throws IOException { Long[] array = {1L}; GenericData.Record record = new GenericRecordBuilder(SIMPLE_SCHEMA) .set("bar", "test") .set("foo", 32L) .set("arr", array).build(); Path path = createTempParquetFile(tempRoot.getRoot(), SIMPLE_SCHEMA, Collections.singletonList(record)); MessageType readSchema = (new AvroSchemaConverter()).convert(SIMPLE_SCHEMA); ParquetRecordReader<Row> rowReader = new ParquetRecordReader<>(new RowReadSupport(), readSchema); InputFile inputFile = HadoopInputFile.fromPath(new org.apache.hadoop.fs.Path(path.toUri()), testConfig); ParquetReadOptions options = ParquetReadOptions.builder().build(); ParquetFileReader fileReader = new ParquetFileReader(inputFile, options); rowReader.initialize(fileReader, testConfig); assertFalse(rowReader.reachEnd()); Row row = rowReader.nextRecord(); assertEquals(3, row.getArity()); assertEquals(32L, row.getField(0)); assertEquals("test", row.getField(1)); assertArrayEquals(array, (Long[]) row.getField(2)); assertTrue(rowReader.reachEnd()); }
Example #24
Source File: ParquetRecordReaderTest.java From flink with Apache License 2.0 | 5 votes |
@Test public void testNestedMapGroup() throws IOException { Schema nestedMapSchema = unWrapSchema(NESTED_SCHEMA.getField("nestedMap").schema()); Preconditions.checkState(nestedMapSchema.getType().equals(Schema.Type.MAP)); Schema mapValueSchema = nestedMapSchema.getValueType(); GenericRecord mapValue = new GenericRecordBuilder(mapValueSchema) .set("type", "nested") .set("value", "nested_value").build(); ImmutableMap.Builder<String, GenericRecord> map = ImmutableMap.builder(); map.put("testKey", mapValue); GenericRecord record = new GenericRecordBuilder(NESTED_SCHEMA) .set("nestedMap", map.build()) .set("foo", 34L).build(); Path path = createTempParquetFile(tempRoot.getRoot(), NESTED_SCHEMA, Collections.singletonList(record)); MessageType readSchema = (new AvroSchemaConverter()).convert(NESTED_SCHEMA); ParquetRecordReader<Row> rowReader = new ParquetRecordReader<>(new RowReadSupport(), readSchema); InputFile inputFile = HadoopInputFile.fromPath(new org.apache.hadoop.fs.Path(path.toUri()), testConfig); ParquetReadOptions options = ParquetReadOptions.builder().build(); ParquetFileReader fileReader = new ParquetFileReader(inputFile, options); rowReader.initialize(fileReader, testConfig); assertFalse(rowReader.reachEnd()); Row row = rowReader.nextRecord(); assertEquals(7, row.getArity()); assertEquals(34L, row.getField(0)); Map result = (Map) row.getField(5); Row nestedRow = (Row) result.get("testKey"); assertEquals("nested", nestedRow.getField(0)); assertEquals("nested_value", nestedRow.getField(1)); }
Example #25
Source File: ParquetRecordReaderTest.java From flink with Apache License 2.0 | 5 votes |
@Test public void testMapGroup() throws IOException { Preconditions.checkState(unWrapSchema(NESTED_SCHEMA.getField("spamMap").schema()) .getType().equals(Schema.Type.MAP)); ImmutableMap.Builder<String, String> map = ImmutableMap.builder(); map.put("testKey", "testValue"); GenericRecord record = new GenericRecordBuilder(NESTED_SCHEMA) .set("foo", 32L) .set("spamMap", map.build()) .build(); Path path = createTempParquetFile(tempRoot.getRoot(), NESTED_SCHEMA, Collections.singletonList(record)); MessageType readSchema = (new AvroSchemaConverter()).convert(NESTED_SCHEMA); ParquetRecordReader<Row> rowReader = new ParquetRecordReader<>(new RowReadSupport(), readSchema); InputFile inputFile = HadoopInputFile.fromPath(new org.apache.hadoop.fs.Path(path.toUri()), testConfig); ParquetReadOptions options = ParquetReadOptions.builder().build(); ParquetFileReader fileReader = new ParquetFileReader(inputFile, options); rowReader.initialize(fileReader, testConfig); assertFalse(rowReader.reachEnd()); Row row = rowReader.nextRecord(); assertEquals(7, row.getArity()); assertEquals(32L, row.getField(0)); Map<?, ?> result = (Map<?, ?>) row.getField(1); assertEquals(result.get("testKey").toString(), "testValue"); assertTrue(rowReader.reachEnd()); }
Example #26
Source File: ParquetRecordReaderTest.java From flink with Apache License 2.0 | 5 votes |
@Test public void testReadMultipleSimpleGroup() throws IOException { Long[] array = {1L}; List<IndexedRecord> records = new ArrayList<>(); for (int i = 0; i < 100; i++) { GenericData.Record record = new GenericRecordBuilder(SIMPLE_SCHEMA) .set("bar", "test") .set("foo", i) .set("arr", array).build(); records.add(record); } Path path = createTempParquetFile(tempRoot.getRoot(), SIMPLE_SCHEMA, records); MessageType readSchema = (new AvroSchemaConverter()).convert(SIMPLE_SCHEMA); ParquetRecordReader<Row> rowReader = new ParquetRecordReader<>(new RowReadSupport(), readSchema); InputFile inputFile = HadoopInputFile.fromPath(new org.apache.hadoop.fs.Path(path.toUri()), testConfig); ParquetReadOptions options = ParquetReadOptions.builder().build(); ParquetFileReader fileReader = new ParquetFileReader(inputFile, options); rowReader.initialize(fileReader, testConfig); assertTrue(!rowReader.reachEnd()); for (long i = 0; i < 100; i++) { assertFalse(rowReader.reachEnd()); Row row = rowReader.nextRecord(); assertEquals(3, row.getArity()); assertEquals(i, row.getField(0)); assertEquals("test", row.getField(1)); assertArrayEquals(array, (Long[]) row.getField(2)); } assertTrue(rowReader.reachEnd()); }
Example #27
Source File: ParquetRecordReaderTest.java From flink with Apache License 2.0 | 5 votes |
@Test public void testReadNestedGroup() throws IOException { Schema schema = unWrapSchema(NESTED_SCHEMA.getField("bar").schema()); GenericData.Record barRecord = new GenericRecordBuilder(schema) .set("spam", 31L).build(); GenericData.Record record = new GenericRecordBuilder(NESTED_SCHEMA) .set("foo", 32L) .set("bar", barRecord) .build(); Path path = createTempParquetFile(tempRoot.getRoot(), NESTED_SCHEMA, Collections.singletonList(record)); MessageType readSchema = (new AvroSchemaConverter()).convert(NESTED_SCHEMA); ParquetRecordReader<Row> rowReader = new ParquetRecordReader<>(new RowReadSupport(), readSchema); InputFile inputFile = HadoopInputFile.fromPath(new org.apache.hadoop.fs.Path(path.toUri()), testConfig); ParquetReadOptions options = ParquetReadOptions.builder().build(); ParquetFileReader fileReader = new ParquetFileReader(inputFile, options); rowReader.initialize(fileReader, testConfig); assertFalse(rowReader.reachEnd()); Row row = rowReader.nextRecord(); assertEquals(7, row.getArity()); assertEquals(32L, row.getField(0)); assertEquals(31L, ((Row) row.getField(2)).getField(0)); assertTrue(rowReader.reachEnd()); }
Example #28
Source File: ParquetMetadataConverter.java From parquet-mr with Apache License 2.0 | 4 votes |
public ParquetMetadataConverter(ParquetReadOptions options) { this(options.useSignedStringMinMax()); }
Example #29
Source File: ParquetReader.java From iceberg with Apache License 2.0 | 4 votes |
@SuppressWarnings("unchecked") ReadConf(InputFile file, ParquetReadOptions options, Schema expectedSchema, Expression filter, Function<MessageType, ParquetValueReader<?>> readerFunc, boolean reuseContainers) { this.file = file; this.options = options; this.reader = newReader(file, options); MessageType fileSchema = reader.getFileMetaData().getSchema(); boolean hasIds = hasIds(fileSchema); MessageType typeWithIds = hasIds ? fileSchema : addFallbackIds(fileSchema); this.projection = hasIds ? pruneColumns(fileSchema, expectedSchema) : pruneColumnsFallback(fileSchema, expectedSchema); this.model = (ParquetValueReader<T>) readerFunc.apply(typeWithIds); this.rowGroups = reader.getRowGroups(); this.shouldSkip = new boolean[rowGroups.size()]; ParquetMetricsRowGroupFilter statsFilter = null; ParquetDictionaryRowGroupFilter dictFilter = null; if (filter != null) { statsFilter = new ParquetMetricsRowGroupFilter(expectedSchema, filter); dictFilter = new ParquetDictionaryRowGroupFilter(expectedSchema, filter); } long totalValues = 0L; for (int i = 0; i < shouldSkip.length; i += 1) { BlockMetaData rowGroup = rowGroups.get(i); boolean shouldRead = filter == null || ( statsFilter.shouldRead(typeWithIds, rowGroup) && dictFilter.shouldRead(typeWithIds, rowGroup, reader.getDictionaryReader(rowGroup))); this.shouldSkip[i] = !shouldRead; if (shouldRead) { totalValues += rowGroup.getRowCount(); } } this.totalValues = totalValues; this.reuseContainers = reuseContainers; }
Example #30
Source File: ParquetReaderConfig.java From Bats with Apache License 2.0 | 4 votes |
public ParquetReadOptions toReadOptions() { return ParquetReadOptions.builder() .useSignedStringMinMax(enableStringsSignedMinMax) .build(); }