scala中的嵌套大小写



我对scala非常陌生,需要写一些我不理解的类似case的东西来获得正确的东西:

例如,我需要转换以下

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

加拿大人,请帮帮我,我做错了什么

我会给你一些提示,你自己就很接近了:(

  1. IS-NULL(number, 0)Spark中键入coalesce($"number", lit(0))更具可读性
  2. ROUND(number, 2)可以表示为pround($"number", 2)-这就是您的错误
  3. CASE WHEN (condition) THEN (then_clause) ELSE (else_clause)就是when(condition, then_clause).otherwise(else_clause)

如果您有更多问题,请随时在评论中提问。祝你好运

最新更新