Ten wątek jest trochę stary, ale spotkałem się z podobną sytuacją używając Java. Myślę, że bardziej niż cokolwiek, było pojęciowe niezrozumienie tego, jak powinienem podejść do tego problemu.
Aby rozwiązać problem, utworzyłem proste POJO, aby pomóc w nowej kolumnie dla zestawu danych (w przeciwieństwie do próby zbudowania na istniejącym). Myślę, że koncepcyjnie, nie zrozumiałem, że najlepiej było wygenerować zestaw danych podczas wstępnej lektury, gdzie trzeba dodać dodatkową kolumnę. Mam nadzieję, że to pomoże komuś w przyszłości.
Rozważmy następujący:
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...
Jedynym problemem związanym z withColumn jest to, że trudno będzie sekwencyjnie pobierać elementy z listy i dodawać je do wybranych wierszy. Jeśli masz sposób na zrobienie tego, prawdopodobnie jest lepszy w ten sposób, ale twoje pytanie jest ogólne, aby powiedzieć;) – Niemand
Dlaczego, będę konwertować moją listę przede wszystkim do obiektu kolumny i dodać go jak drugi argument funkcji. Czy to nie jest w porządku? ... – Guforu
Interesujące. Opublikuj, jak to zrobiłeś po zakończeniu. – Niemand