spark列:在使用数学函数或spark表达式时如何处理空值( java 语)

x8diyxa7  于 2021-05-27  发布在  Spark
关注(0)|答案(0)|浏览(274)

我正在尝试对多个列值执行一些数学函数,并在同一Dataframe中创建一个新列。例如

  1. id | name | Quantity | price
  2. _______________________________
  3. 1 | Luke | 10 | 5

应该变成

  1. iid | name | Quantity | price | derivedCol
  2. _______________________________
  3. 1 | Luke | 10 | 5 | 50

所以spark表达式是:derivedcol=(数量*价格)。
我在循环中执行它,这样就可以创建多个列。
现在我面临的问题是执行时如果column的值为null,那么程序抛出nullpointeexception并停止。如果所有的值都存在,没有任何空值,那么程序运行平稳。计算是在运行时进行的,我找不到检查列的空值的选项。我不想筛选空值行。

  1. if(null != derivedColNxtObj) {
  2. switch (operatorStr) {
  3. case "+":
  4. derivedCol = derivedCol.plus(derivedColNxtObj);
  5. break;
  6. case "-":
  7. derivedCol = derivedCol.minus(derivedColNxtObj);
  8. break;
  9. case "*":
  10. derivedCol = derivedCol.multiply(derivedColNxtObj);
  11. break;
  12. case "/":
  13. derivedCol = derivedCol.divide(derivedColNxtObj);
  14. break;
  15. }
  16. }
  17. }
  18. df = df.withColumn(fieldname, derivedCol);

那么,如何忽略空值并顺利执行表达式呢?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题