use of co.cask.cdap.api.data.format.FormatSpecification in project cdap by caskdata.
the class DelimitedStringsRecordFormatTest method testFormatRecordWithMapping.
@Test
public void testFormatRecordWithMapping() throws UnsupportedTypeException {
Schema schema = Schema.recordOf("event", Schema.Field.of("f3", Schema.unionOf(Schema.of(Schema.Type.FLOAT), Schema.of(Schema.Type.NULL))), Schema.Field.of("f4", Schema.unionOf(Schema.of(Schema.Type.DOUBLE), Schema.of(Schema.Type.NULL))));
DelimitedStringsRecordFormat format = new DelimitedStringsRecordFormat();
FormatSpecification spec = new FormatSpecification(DelimitedStringsRecordFormat.class.getCanonicalName(), schema, ImmutableMap.of(DelimitedStringsRecordFormat.DELIMITER, ",", DelimitedStringsRecordFormat.MAPPING, "2:f3,3:f4"));
format.initialize(spec);
boolean booleanVal = false;
int intVal = Integer.MAX_VALUE;
float floatVal = Float.MAX_VALUE;
double doubleVal = Double.MAX_VALUE;
byte[] bytesVal = new byte[] { 0, 1, 2 };
String stringVal = "foo bar";
String[] arrayVal = new String[] { "extra1", "extra2", "extra3" };
String body = new StringBuilder().append(booleanVal).append(",").append(intVal).append(",").append(floatVal).append(",").append(doubleVal).append(",").append(Bytes.toStringBinary(bytesVal)).append(",").append(stringVal).append(",").append(arrayVal[0]).append(",").append(arrayVal[1]).append(",").append(arrayVal[2]).toString();
StructuredRecord output = format.read(new StreamEvent(ByteBuffer.wrap(Bytes.toBytes(body))));
Assert.assertEquals(2, output.getSchema().getFields().size());
Assert.assertNull(output.get("f1"));
Assert.assertNull(output.get("f2"));
Assert.assertEquals(floatVal, output.get("f3"));
Assert.assertEquals(doubleVal, output.get("f4"));
Assert.assertNull(output.get("f5"));
Assert.assertNull(output.get("f6"));
Assert.assertNull(output.get("f7"));
// now try with null fields.
output = format.read(new StreamEvent(ByteBuffer.wrap(Bytes.toBytes("true,,3.14159,,,hello world,extra1"))));
Assert.assertEquals(2, output.getSchema().getFields().size());
Assert.assertNull(output.get("f1"));
Assert.assertNull(output.get("f2"));
Assert.assertTrue(Math.abs(3.14159 - (Float) output.get("f3")) < 0.000001);
Assert.assertNull(output.get("f4"));
Assert.assertNull(output.get("f5"));
Assert.assertNull(output.get("f6"));
Assert.assertNull(output.get("f7"));
}
use of co.cask.cdap.api.data.format.FormatSpecification in project cdap by caskdata.
the class DelimitedStringsRecordFormatTest method testComplexArraySchemaValidation.
@Test(expected = UnsupportedTypeException.class)
public void testComplexArraySchemaValidation() throws UnsupportedTypeException {
Schema mapSchema = Schema.mapOf(Schema.of(Schema.Type.STRING), Schema.of(Schema.Type.STRING));
Schema schema = Schema.recordOf("event", Schema.Field.of("f1", Schema.arrayOf(mapSchema)));
FormatSpecification formatSpec = new FormatSpecification(DelimitedStringsRecordFormat.class.getCanonicalName(), schema, Collections.<String, String>emptyMap());
DelimitedStringsRecordFormat format = new DelimitedStringsRecordFormat();
format.initialize(formatSpec);
}
use of co.cask.cdap.api.data.format.FormatSpecification in project cdap by caskdata.
the class DelimitedStringsRecordFormatTest method testMapFieldInvalid.
@Test(expected = UnsupportedTypeException.class)
public void testMapFieldInvalid() throws UnsupportedTypeException {
Schema mapSchema = Schema.mapOf(Schema.of(Schema.Type.STRING), Schema.of(Schema.Type.STRING));
Schema schema = Schema.recordOf("event", Schema.Field.of("f1", mapSchema));
FormatSpecification formatSpec = new FormatSpecification(DelimitedStringsRecordFormat.class.getCanonicalName(), schema, Collections.<String, String>emptyMap());
DelimitedStringsRecordFormat format = new DelimitedStringsRecordFormat();
format.initialize(formatSpec);
}
use of co.cask.cdap.api.data.format.FormatSpecification in project cdap by caskdata.
the class DelimitedStringsRecordFormatTest method testSimpleSchemaValidation.
@Test
public void testSimpleSchemaValidation() throws UnsupportedTypeException {
Schema simpleSchema = Schema.recordOf("event", Schema.Field.of("f1", Schema.of(Schema.Type.BOOLEAN)), Schema.Field.of("f2", Schema.of(Schema.Type.INT)), Schema.Field.of("f3", Schema.of(Schema.Type.FLOAT)), Schema.Field.of("f4", Schema.of(Schema.Type.DOUBLE)), Schema.Field.of("f5", Schema.of(Schema.Type.BYTES)), Schema.Field.of("f6", Schema.of(Schema.Type.STRING)));
DelimitedStringsRecordFormat format = new DelimitedStringsRecordFormat();
FormatSpecification formatSpec = new FormatSpecification(DelimitedStringsRecordFormat.class.getCanonicalName(), simpleSchema, Collections.<String, String>emptyMap());
format.initialize(formatSpec);
}
use of co.cask.cdap.api.data.format.FormatSpecification in project cdap by caskdata.
the class DelimitedStringsRecordFormatTest method testRecordMappingTooManyMappings.
@Test(expected = IllegalArgumentException.class)
public void testRecordMappingTooManyMappings() throws UnsupportedTypeException {
Schema arraySchema = Schema.arrayOf(Schema.of(Schema.Type.STRING));
Schema schema = Schema.recordOf("event", Schema.Field.of("f1", arraySchema));
FormatSpecification formatSpec = new FormatSpecification(DelimitedStringsRecordFormat.class.getCanonicalName(), schema, ImmutableMap.of(DelimitedStringsRecordFormat.MAPPING, "0:f1,1:f2"));
DelimitedStringsRecordFormat format = new DelimitedStringsRecordFormat();
format.initialize(formatSpec);
}
Aggregations