Создайте схему Avro со списком имен полей и той же схемой - PullRequest
0 голосов
/ 12 марта 2020

У меня возникла проблема с поиском решения для моей проблемы.

Мне нужно вызвать метод поля между struct () и методом build () x раз, чтобы создать новый объект. Это шаблон строителя.

Schema people = SchemaBuilder.struct()
                .field("NAME", Schema.STRING_SCHEMA)
                .field("SURNAME", Schema.STRING_SCHEMA)
                .field("CITY", Schema.STRING_SCHEMA)
                .build();

Но в моем случае поля схемы людей не определены с самого начала. Они должны быть переменными. Мне нужно что-то вроде:

String[] values = {"NAME", "SURNAME", "CITY", "FIELD4", "FIELD5", .....};

Schema people = SchemaBuilder.struct()
          .xTimes.field(values[x], Schema.STRING_SCHEMA))
          .build();

Я смотрел на потоки и лямбды, но никогда не работал с ними, и я не уверен, могут ли они быть решением для этого случая. Я не могу прервать методы. Все они должны быть вызваны в один ряд. То, что я пытаюсь сделать, даже возможно, и если да, то как?

Спасибо

РЕДАКТИРОВАТЬ: Это то, что я пытался, но не сработало:

public Schema buildSchema(String... fields){
  sch1 = SchemaBuilder.struct();
  for (int i = 0; i < fields.length; i++) {
    sch1 =SchemaBuilder.struct().field(fields[i], Schema.STRING_SCHEMA);
  }
  return sch1;
}

Это прекрасно работает, но не соответствует моим потребностям:

public Schema buildSchema(){
  Schema sch1 = SchemaBuilder.struct()
    .field("foo", Schema.STRING_SCHEMA)
    .field("bar", Schema.STRING_SCHEMA)
    .field("duck", Schema.STRING_SCHEMA)
    .build();
  return sch1
}

1 Ответ

3 голосов
/ 12 марта 2020
String[] values = {"NAME", "SURNAME", "CITY", "FIELD4", "FIELD5", .....};

SchemaBuilder builder = SchemaBuilder.struct();
for (int i = 0; i < values.length; i++) {
    builder = builder.field(values[i], Schema.STRING_SCHEMA)
}
Schema people = builder.build();

как насчет такого?

...