Spark: мой набор данных не обновляется после применения foreach

#java #scala #apache-spark

#java #scala #apache-spark

Вопрос:

У меня есть набор данных, подобный этому: Dataset<MyModel> ds , и MyModel имеет поле name (и еще много полей).

Я пытаюсь сделать это :

 ds.foreach(r -> {
  r.setName("name");
});
return ds;
  

но я обнаружил, что в возвращаемом ds name поле не обновляется.

Я хочу знать, что я должен сделать, чтобы позволить ds обновляться?

Ответ №1:

Вы не можете изменить набор данных, только создать новый

Поэтому вам нужно применить карту к набору данных, изменив поля, в результате чего будет создан новый набор данных

Если бы MyModel был классом case, вы бы сделали:

ds.map(x => x.copy(MyField = «новое значение»))

В качестве экземпляра класса я бы рекомендовал, чтобы на карте вы создали копию объекта, изменили поля и вернули копию.

Комментарии:

1. Привет, спасибо за вашу помощь. Знаете ли вы, как добиться того же, используя map?

2. MyModel — это простой класс POJO, и внутри него действительно есть кодировщик