我对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
加拿大人,请帮帮我,我做错了什么
我会给你一些提示,你自己就很接近了:(
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)
如果您有更多问题,请随时在评论中提问。祝你好运