Skip to content

Instantly share code, notes, and snippets.

@kkirsanov
Created August 28, 2017 16:02
Show Gist options
  • Save kkirsanov/a7441031721777bdc652b1513566f11e to your computer and use it in GitHub Desktop.
Save kkirsanov/a7441031721777bdc652b1513566f11e to your computer and use it in GitHub Desktop.
import java.io.File
import java.util.UUID
import org.apache.avro.Conversions.DecimalConversion
import org.apache.avro.Conversions.UUIDConversion
import org.apache.avro.Schema
import org.apache.avro.file.DataFileWriter
import org.apache.avro.generic.{GenericData, GenericRecord}
import org.apache.avro.io.DatumWriter
val strSchema =
"""
|{
| "namespace": "rfi.test",
| "type": "record",
| "name": "simple",
| "fields": [
| {
| "name": "name",
| "type": "string",
| "doc": "Some name"
| },
| {
| "name": "amount",
| "type": {
| "type": "bytes",
| "logicalType": "decimal",
| "precision": 18,
| "scale": 6
| },
| "doc": "Some decimal amount"
| },
| {
| "name": "id",
| "type": {
| "type": "string",
| "logicalType": "uuid"
| },
| "doc": "Some uuid value"
| }
| ]
|}
|
""".stripMargin
val schema: Schema = new Schema.Parser().parse(strSchema)
val genericData = new GenericData()
genericData.addLogicalTypeConversion(new DecimalConversion())
genericData.addLogicalTypeConversion(new UUIDConversion())
val file: File = new File("/tmp/sample.avro")
val datumWriter = genericData.createDatumWriter(schema).asInstanceOf[DatumWriter[GenericRecord]]
val dataFileWriter: DataFileWriter[GenericRecord] = new DataFileWriter[GenericRecord](datumWriter)
dataFileWriter.create(schema, file)
for(i <- 0 to 150) {
val sample: GenericRecord = genericData.newRecord(null, schema).asInstanceOf[GenericRecord]
sample.put("name", f"Test Instance $i")
sample.put("amount", (i * BigDecimal("0.450222")).bigDecimal)
sample.put("id", UUID.randomUUID)
dataFileWriter.append(sample)
}
dataFileWriter.close()
print("OK")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment