Java: как добавить столбцы в dataframe на основе списка объектов

#java #dataframe #apache-spark #iterator

#java #фрейм данных #apache-искра #итератор

Вопрос:

Мне нужно добавить столбцы в мой dataframe и columns= List, поэтому мне нужно выполнить итерацию по этому списку объектов:

 columns=[
{val1="A",val2="num1"},
{val1="B",val2="num2"},
{val1="C",val2="num3"},
{val1="D",val2="num4"}
]
 

mydataframe

  |nom     |prenom   | age |
 |arnauld | simpson | 43  |
 

ожидаемый результат:

  |nom     |prenom   | age | A   | B  | C  | D  |
 |arnauld | simpson | 43  |num1 |num2|num3|num4|
 

что я пробовал, так это :

 Iterator<Myclass> iterator = cols.iterator();
Dataset<Row> result=myDf;
while (iterator.hasNext()) {

  Myclass res = iterator.next();

  String val1= res.getVal1();
  String val2= res.getVal2();
 

  result = myDf.withColumn(val1, expr(val2));
  result.show();

}
 

но у меня нет ожидаемого результата, у меня есть только последний объект (val1=»D», val2=»num4″).
Пожалуйста, как я могу получить ожидаемый результат?

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

1. Вы можете создать другой фрейм данных из объекта итератора и присоединиться к основному фрейму данных.

Ответ №1:

result = myDf.withColumn(val1, expr(val2));

должно быть

result = result.withColumn(val1, expr(val2));

В противном случае вы отбрасываете result его на каждой итерации.

 Iterator<Myclass> iterator = cols.iterator();
Dataset<Row> result=myDf;
while (iterator.hasNext()) {

  Myclass res = iterator.next();

  String val1= res.getVal1();
  String val2= res.getVal2();
 

  result = result.withColumn(val1, expr(val2));
  result.show();

}