首页 > 解决方案 > spark中的IF函数给出错误

问题描述

我正在使用下面的代码,但它给出了错误。请指导。

val a = Seq(
  ("ram,shyam,hari",12,10),
  ("shyam,ram,hari",3,5)
).toDF("name","id","dt")
  .withColumn("newcol",if($"id">$"dt",0,1))
  .show()

错误如下,

:14: 错误:')' 预期但 ',' 找到。.withColumn("newcol",if($"id">$"dt",0,1)).show()

标签: scalaapache-spark

解决方案


你需要when.otherwise

val df = Seq(("ram,shyam,hari",12,10),("shyam,ram,hari",3,5)).toDF("name","id","dt")

df.withColumn("newcol", when($"id" > $"dt", 0).otherwise(1)).show
//+--------------+---+---+------+
//|          name| id| dt|newcol|
//+--------------+---+---+------+
//|ram,shyam,hari| 12| 10|     0|
//|shyam,ram,hari|  3|  5|     1|
//+--------------+---+---+------+

或者您可以将比较结果转换为int

df.withColumn("newcol", ($"id" <= $"dt").cast("int")).show
//+--------------+---+---+------+
//|          name| id| dt|newcol|
//+--------------+---+---+------+
//|ram,shyam,hari| 12| 10|     0|
//|shyam,ram,hari|  3|  5|     1|
//+--------------+---+---+------+

推荐阅读