@Override public String apply(final Row input) { final String c2 = input.getString(0); final Double c3 = input.getDouble(1); return c2 + " is " + c3; } })), outputFilePath);
/** * Get a {@link TypeName#STRING} value by field name, {@link IllegalStateException} is thrown if * schema doesn't match. */ @Nullable public String getString(String fieldName) { return getString(getSchema().indexOf(fieldName)); }
@Override public PCollection<String> expand(PCollection<Row> input) { return input.apply( "rowsToLines", MapElements.into(TypeDescriptors.strings()).via((Row row) -> row.getString(0) + "\n")); } }
@ProcessElement public void process(@Element Row row, OutputReceiver<String> r) { r.output(row.getString(0) + ":" + row.getInt32(1)); } }));
@ProcessElement public void process(@Element Row row, OutputReceiver<String> r) { r.output( row.getString("string2_field") + ":" + row.getInt32("integer2_field")); } }));
@ProcessElement public void process(@Element Row row, OutputReceiver<String> r) { r.output( row.getString("string3_field") + ":" + row.getInt32("integer3_field")); } }));
@ProcessElement public void process(@Element Row row, OutputReceiver<String> r) { r.output(row.getString(0) + ":" + row.getInt32(1)); } }));
@ProcessElement public void process(@Element Row row, OutputReceiver<String> r) { r.output(row.getString(0) + ":" + row.getInt32(1)); } }));
@ProcessElement public void process(@FieldAccess("foo") Row row, OutputReceiver<String> r) { r.output(row.getString(0) + ":" + row.getInt32(1)); } }));
@ProcessElement public void process(@Element Row row, OutputReceiver<String> r) { r.output(row.getString(0) + ":" + row.getInt32(1)); } }));
@ProcessElement public void process(@Element Row row, OutputReceiver<Row> r) { r.output( Row.withSchema(schema2) .addValues(row.getString(0), row.getInt32(1)) .build()); } }))
@ProcessElement public void process(@Element Row row, OutputReceiver<Row> r) { r.output( Row.withSchema(schema) .addValues(row.getString(0), row.getInt32(1)) .build()); } }))
@Test public void testCreateExplicitSchema() { PCollection<String> out = p.apply( Create.of("a", "b", "c", "d") .withSchema( STRING_SCHEMA, s -> Row.withSchema(STRING_SCHEMA).addValue(s).build(), r -> r.getString("field"))); assertThat(out.getCoder(), instanceOf(SchemaCoder.class)); }
@ProcessElement public void process(@Element Row row, MultiOutputReceiver r) { r.getRowReceiver(firstOutput) .output( Row.withSchema(schema2) .addValues(row.getString(0), row.getInt32(1)) .build()); r.getRowReceiver(secondOutput) .output( Row.withSchema(schema3) .addValues(row.getString(0), row.getInt32(1)) .build()); } })
@Test public void testCreatesNestedRow() { Schema nestedType = Stream.of(Schema.Field.of("f1_str", Schema.FieldType.STRING)).collect(toSchema()); Schema type = Stream.of( Schema.Field.of("f_int", Schema.FieldType.INT32), Schema.Field.of("nested", Schema.FieldType.row(nestedType))) .collect(toSchema()); Row nestedRow = Row.withSchema(nestedType).addValues("foobar").build(); Row row = Row.withSchema(type).addValues(42, nestedRow).build(); assertEquals((int) 42, (Object) row.getInt32("f_int")); assertEquals("foobar", row.getRow("nested").getString("f1_str")); }
@Test public void testCreateRegisteredSchema() { p.getSchemaRegistry() .registerSchemaForClass( String.class, STRING_SCHEMA, s -> Row.withSchema(STRING_SCHEMA).addValue(s).build(), r -> r.getString("field")); PCollection<String> out = p.apply(Create.of("a", "b", "c", "d")); assertThat(out.getCoder(), instanceOf(SchemaCoder.class)); }
@Test public void testNullValuesGetters() throws NoSuchSchemaException { SchemaRegistry registry = SchemaRegistry.createDefault(); Row row = registry.getToRowFunction(POJOWithNullables.class).apply(new POJOWithNullables(null, 42)); assertNull(row.getString("str")); assertEquals(42, (Object) row.getInt32("anInt")); }
@Test public void testRegisterForClass() throws NoSuchSchemaException { SchemaRegistry registry = SchemaRegistry.createDefault(); registry.registerSchemaForClass( String.class, STRING_SCHEMA, s -> Row.withSchema(STRING_SCHEMA).addValue(s).build(), r -> r.getString("string")); registry.registerSchemaForClass( Integer.class, INTEGER_SCHEMA, s -> Row.withSchema(INTEGER_SCHEMA).addValue(s).build(), r -> r.getInt32("integer")); tryGetters(registry); }
@Test public void testRegisterForType() throws NoSuchSchemaException { SchemaRegistry registry = SchemaRegistry.createDefault(); registry.registerSchemaForType( TypeDescriptors.strings(), STRING_SCHEMA, s -> Row.withSchema(STRING_SCHEMA).addValue(s).build(), r -> r.getString("string")); registry.registerSchemaForType( TypeDescriptors.integers(), INTEGER_SCHEMA, s -> Row.withSchema(INTEGER_SCHEMA).addValue(s).build(), r -> r.getInt32("integer")); tryGetters(registry); }
@Test public void testToRow() throws NoSuchSchemaException { SchemaRegistry registry = SchemaRegistry.createDefault(); SimplePOJO pojo = createSimple("string"); Row row = registry.getToRowFunction(SimplePOJO.class).apply(pojo); assertEquals(12, row.getFieldCount()); assertEquals("string", row.getString("str")); assertEquals((byte) 1, (Object) row.getByte("aByte")); assertEquals((short) 2, (Object) row.getInt16("aShort")); assertEquals((int) 3, (Object) row.getInt32("anInt")); assertEquals((long) 4, (Object) row.getInt64("aLong")); assertEquals(true, row.getBoolean("aBoolean")); assertEquals(DATE.toInstant(), row.getDateTime("dateTime")); assertEquals(INSTANT, row.getDateTime("instant").toInstant()); assertArrayEquals(BYTE_ARRAY, row.getBytes("bytes")); assertArrayEquals(BYTE_BUFFER.array(), row.getBytes("byteBuffer")); assertEquals(BigDecimal.ONE, row.getDecimal("bigDecimal")); assertEquals("stringbuilder", row.getString("stringBuilder")); }