如何在 Spark 数据帧上执行非交换标量到矢量运算



对于火花数据框,假设我有一列 double 或 int 类型,我想对其应用标量运算。如果操作是可交换的(如加法),那很好,我可以执行以下操作:

df.withColumn("RESULT", df("col") + 10)

但是,如果运算不是可交换的(如除法)怎么办?

这将起作用

df.withColumn("RESULT", df("col") / 10)

但这不起作用(错误是类型不匹配)

df.withColumn("RESULT", 10 / df("col"))

提供原始 sql 可以工作,但随后您必须处理选择前几列的维护:

df.select("10 / col")

您也可以将标量值注入 df 中,但随后必须将其删除。

有没有更简单的方法可以做到这一点?

是的,有。只需使用 SQL 文字:

import org.apache.spark.sql.functions.lit
df.withColumn("RESULT", lit(10) / df("col"))

您还可以使用selectExpr

df.selectExpr("*", "10 / col as result")

expr

import org.apache.spark.sql.functions.expr
df.withColumn("RESULT", expr("10 / col"))

相关内容

  • 没有找到相关文章

最新更新