Этот поток немного старый, но я столкнулся с аналогичной ситуацией с использованием Java. Я думаю больше всего на свете, было концептуальное непонимание того, как я должен подходить к этой проблеме.
Чтобы исправить мою проблему, я создал простую POJO, чтобы помочь с новым столбцом для набора данных (в отличие от попытки построить на существующем). Я думаю, что концептуально я не понял, что лучше всего создавать набор данных во время первоначального чтения, где нужно добавить дополнительный столбец. Надеюсь, это поможет кому-то в будущем.
Рассмотрим следующий пример:
JavaRDD<MyPojo> myRdd = dao.getSession().read().jdbc("jdbcurl","mytable",someObject.getProperties()).javaRDD().map(new Function<Row,MyPojo>() {
private static final long serialVersionUID = 1L;
@Override
public MyPojo call(Row row) throws Exception {
Integer curDos = calculateStuff(row); //manipulate my data
MyPojo pojoInst = new MyPojo();
pojoInst.setBaseValue(row.getAs("BASE_VALUE_COLUMN"));
pojoInst.setKey(row.getAs("KEY_COLUMN"));
pojoInst.setCalculatedValue(curDos);
return dos;
}
});
Dataset<Row> myRddRFF = dao.getSession().createDataFrame(myRdd, MyPojo.class);
//continue load or other operation here...
Единственная проблема с withColumn - это будет сложно подобрать элементы из вашего списка последовательно и добавить их в выбранные строки. Если у вас есть способ сделать это, вероятно, это будет лучше, но ваш вопрос должен быть общим, чтобы сказать;) – Niemand
Почему я сначала конвертирую свой список в объект Column и добавляю его как второй аргумент функции. Разве это не нормально? ... – Guforu
Интересно. Пожалуйста, напишите, как вы это сделали после того, как закончите. – Niemand