scala - 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()
解决方案
你需要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|
//+--------------+---+---+------+