当前位置:  开发笔记 > 编程语言 > 正文

通过类型的大小写匹配,根据SparkSQL中的类型转换值

如何解决《通过类型的大小写匹配,根据SparkSQL中的类型转换值》经验,为你挑选了2个好方法。



1> KrisP..:

问题是return您的代码中使用了。您说过您在某处的函数中使用了此代码段。该函数的返回类型是什么?显然,您打算有时是Integer,有时是String,有时是BigDecimal。但是,如果使用return,它将查找返回对象的类型以确定该函数的返回类型。通常,您应该强烈避免return在Scala代码中使用。返回函数主体中的最后一个评估值。使用a的唯一情况return是当您想强制在函数主体中的其他位置返回值时。但是,更好的方法是将返回对象保存在变量中,然后仅在函数体的最后一行求值该变量。永远不要使用return!

没有return它的作品

scala> val datatype = DecimalType(10, 2)
datatype: org.apache.spark.sql.types.DecimalType = DecimalType(10,2)

scala> val value = BigDecimal(10)
value: scala.math.BigDecimal = 10

scala> datatype match {case DecimalType(_,_) => value}
res150: scala.math.BigDecimal = 10

**退货问题**

scala> def test = {datatype match {case DecimalType(_,_) => return value}}
:138: error: method test has return statement; needs result type
       def test = {datatype match {case DecimalType(_,_) => return value}}

scala> def test:BigDecimal = {datatype match {case DecimalType(_,_) => return value}}
test: BigDecimal

scala> def test:DataType = {datatype match {case DecimalType(_,_) => return value}}
:138: error: type mismatch;
 found   : scala.math.BigDecimal
 required: org.apache.spark.sql.types.DataType
       def test:DataType = {datatype match {case DecimalType(_,_) => return value}}

scala> def test3 = {datatype match {case DecimalType(_,_) => value}}
test3: scala.math.BigDecimal



2> Brandon Brad..:

原来只有DecimalType模式与零参数匹配:

  case DecimalType() => ...

如果需要精度和小数位数,则必须定义案例的类型并手动提取它们:

datatype match {
  case dt: DecimalType =>
    val precision = dt.precision
    val scale = dt.scale
    ...

推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有