|
16 | 16 |
|
17 | 17 | package magnolify.jmh
|
18 | 18 |
|
19 |
| -import java.util.concurrent.TimeUnit |
| 19 | +import magnolify.jmh.MagnolifyBench.nested |
| 20 | +import magnolify.parquet.{ParquetType, TestInputFile, TestOutputFile} |
20 | 21 |
|
| 22 | +import java.util.concurrent.TimeUnit |
21 | 23 | import magnolify.scalacheck.auto._
|
22 | 24 | import magnolify.test.Simple._
|
| 25 | +import org.apache.parquet.hadoop.{ParquetReader, ParquetWriter} |
23 | 26 | import org.scalacheck._
|
24 | 27 | import org.openjdk.jmh.annotations._
|
25 | 28 |
|
@@ -87,6 +90,57 @@ class AvroBench {
|
87 | 90 | @Benchmark def avroSchema: Schema = AvroType[Nested].schema
|
88 | 91 | }
|
89 | 92 |
|
| 93 | +@State(Scope.Benchmark) |
| 94 | +class ParquetReadState { |
| 95 | + private val parquetType = ParquetType[Nested] |
| 96 | + var out: TestOutputFile = null |
| 97 | + var reader: ParquetReader[Nested] = null |
| 98 | + |
| 99 | + @Setup(Level.Invocation) |
| 100 | + def setup(): Unit = { |
| 101 | + out = new TestOutputFile |
| 102 | + val writer = parquetType.writeBuilder(out).build() |
| 103 | + writer.write(nested) |
| 104 | + writer.close() |
| 105 | + |
| 106 | + val in = new TestInputFile(out.getBytes) |
| 107 | + reader = parquetType.readBuilder(in).build() |
| 108 | + } |
| 109 | + |
| 110 | + @TearDown(Level.Invocation) |
| 111 | + def tearDown(): Unit = { |
| 112 | + reader.close() |
| 113 | + } |
| 114 | +} |
| 115 | + |
| 116 | +@State(Scope.Benchmark) |
| 117 | +class ParquetWriteState { |
| 118 | + private val parquetType = ParquetType[Nested] |
| 119 | + var writer: ParquetWriter[Nested] = null |
| 120 | + |
| 121 | + @Setup(Level.Invocation) |
| 122 | + def setup(): Unit = { |
| 123 | + val out = new TestOutputFile |
| 124 | + writer = parquetType.writeBuilder(out).build() |
| 125 | + } |
| 126 | + |
| 127 | + @TearDown(Level.Invocation) |
| 128 | + def tearDown(): Unit = { |
| 129 | + writer.close() |
| 130 | + } |
| 131 | +} |
| 132 | + |
| 133 | + |
| 134 | +@BenchmarkMode(Array(Mode.AverageTime)) |
| 135 | +@OutputTimeUnit(TimeUnit.NANOSECONDS) |
| 136 | +@State(Scope.Thread) |
| 137 | +class ParquetBench { |
| 138 | + import MagnolifyBench._ |
| 139 | + |
| 140 | + @Benchmark def parquetWrite(state: ParquetWriteState): Unit = state.writer.write(nested) |
| 141 | + @Benchmark def parquetRead(state: ParquetReadState): Nested = state.reader.read() |
| 142 | +} |
| 143 | + |
90 | 144 | @BenchmarkMode(Array(Mode.AverageTime))
|
91 | 145 | @OutputTimeUnit(TimeUnit.NANOSECONDS)
|
92 | 146 | @State(Scope.Thread)
|
|
0 commit comments