java:如何基于对象列表向dataframe添加列

atmip9wb  于 2021-05-16  发布在  Spark
关注(0)|答案(1)|浏览(514)

我必须将列添加到我的dataframe和columns=list中,所以我必须迭代这个对象列表:

  1. columns=[
  2. {val1="A",val2="num1"},
  3. {val1="B",val2="num2"},
  4. {val1="C",val2="num3"},
  5. {val1="D",val2="num4"}
  6. ]

我的Dataframe

  1. |nom |prenom | age |
  2. |arnauld | simpson | 43 |

预期结果是:

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

我尝试的是:

  1. Iterator<Myclass> iterator = cols.iterator();
  2. Dataset<Row> result=myDf;
  3. while (iterator.hasNext()) {
  4. Myclass res = iterator.next();
  5. String val1= res.getVal1();
  6. String val2= res.getVal2();
  7. result = myDf.withColumn(val1, expr(val2));
  8. result.show();
  9. }

但是我没有预期的结果,我只有最后一个对象(val1=“d”,val2=“num4”)。请问我怎样才能得到预期的结果?

rfbsl7qr

rfbsl7qr1#

result = myDf.withColumn(val1, expr(val2)); 应该是 result = result.withColumn(val1, expr(val2)); 否则您将丢弃 result 在每次迭代中。

  1. Iterator<Myclass> iterator = cols.iterator();
  2. Dataset<Row> result=myDf;
  3. while (iterator.hasNext()) {
  4. Myclass res = iterator.next();
  5. String val1= res.getVal1();
  6. String val2= res.getVal2();
  7. result = result.withColumn(val1, expr(val2));
  8. result.show();
  9. }

相关问题