#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();
}