apachespark-add列是一个复杂的计算

bttbmeg0  于 2021-05-19  发布在  Spark
关注(0)|答案(1)|浏览(471)

我有以下数据集 df1 Spark中:

root
 |-- id: integer (nullable = true)
 |-- t: string (nullable = true)
 |-- x: double (nullable = false)
 |-- y: double (nullable = false)
 |-- z: double (nullable = false)

我需要创建一个列,作为 sqrt(x)+cqrt(y)+z*constantK 我正在尝试以下方法:

val constantK=100500
val df2= df1.select($"id", (scala.math.sqrt($"x")+scala.math.cqrt($"y")+$"z"*constantK ))

但是,我得到了一个类型不匹配的错误

<console>:59: error: type mismatch;
 found   : org.apache.spark.sql.ColumnName
 required: Double
       val df2= df1.select($"id", (scala.math.sqrt($"x")+scala.math.cqrt($"y")+$"z"*constantK ))

添加基于数据框中其他列的值的复杂计算列的正确方法是什么?

mccptt67

mccptt671#

因为您正在尝试在sparksql中使用scala.math函数。sparksql有自己的操作和类型:

import org.apache.spark.sql.functions.sqrt

df1.select($"id", (sqrt($"x")+sqrt($"y")+$"z"*constantK ))

支持运算符“*”。看一看https://spark.apache.org/docs/2.3.0/api/sql/index.html

相关问题