scala中的嵌套case
我对scala非常陌生,需要写一些我不理解的案例,以获得正确的东西: 例如,我需要转换下面的scala中的嵌套case,scala,apache-spark,Scala,Apache Spark,我对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"),
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
:26:错误:with Column方法的参数太多:(colName:String,col:org.apache.spark.sql.Column)org.apache.spark.sql.DataFrame
Cananyone,请帮帮我,我做错了什么我会给你一些提示,你自己已经很接近了:)
IS-NULL(number,0)
在Spark
ascoalesce($“number”,lit(0))
ROUND(number,2)
可以表示为pround($“number”,2)
-这就是你的错误所在CASE WHEN(condition)THEN(THEN_子句)ELSE(ELSE_子句)
是WHEN(condition,THEN_子句)。否则(ELSE_子句)
如果您有更多问题,请随时在评论中提问。祝你好运。获取此错误:26:error:overloaded method value/以及其他选项:(x:Double)Double(x:Float)Float(x:Long)Long(x:Int)Int(x:Char)Int(x:Short)Int(x:Byte)Int不能应用于(org.apache.spark.sql.ColumnName)someDF.select(“*”).withColumn(“TaxRate”),when(coalesce($“number”,lit(0))>0,合并(圆形($“数字”/((100/$“数字”)+1),2)*$“数字”,lit(0))。否则(lit(0))。show()@AnkurSharma提示:必须用
lit()包装文字值