scala - scala中的嵌套案例
问题描述
我对 scala 非常陌生,需要写一些我不理解的案例来获得正确的东西:
例如,我需要转换以下
CASE WHEN ( IS-NULL (Number, 0)) > 0
THEN IS-NULL( (ROUND(number / ((100/number)+1),2) * number), 0 )
ELSE 0 END AS Number_Ratio
我试过这个:
--创建数据框
val someDF = Seq(
(8, "bat"),
(64, "mouse"),
(0, "abc")
).toDF("number", "word")
--案例陈述
someDF.select("*").withColumn("NUMBER_RATIO",when (when($"number".isNull,lit(0))>0, when(ROUND($"number" / ((100/$"number"))+1),2* $"number")).isNull,0).otherwise(lit(0)).show()
我收到错误:
<console>:26: error: too many arguments for method withColumn: (colName: String, col: org.apache.spark.sql.Column)org.apache.spark.sql.DataFrame
Cananyone,请帮助我,我做错了什么
解决方案
我会给你一些提示,你自己很接近:)
IS-NULL(number, 0)
Spark
输入为更具可读性coalesce($"number", lit(0))
ROUND(number, 2)
可以表示为pround($"number", 2)
-这就是你错了CASE WHEN (condition) THEN (then_clause) ELSE (else_clause)
是when(condition, then_clause).otherwise(else_clause)
如果您还有更多问题,请随时在评论中提问。祝你好运。