首页 > 解决方案 > 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,请帮助我,我做错了什么

标签: scalaapache-spark

解决方案


我会给你一些提示,你自己很接近:)

  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)

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


推荐阅读