0

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 ))

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

4

1 回答 1

2

因为您正在尝试在 Spark SQL 中使用 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

于 2020-10-23T15:52:48.983 回答