#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, и внутри него действительно есть кодировщик