学习scala使用spark并在返回类型方面有困难:
代码:
def createSchema (name: String) : StructType = {
if (name == "test01") {
StructType(
List(
StructField("id", StringType, true),
StructField("score", DoubleType, true)
))}
}
生产:
error: type mismatch;
found : Unit
required: org.apache.spark.sql.types.StructType
如果没有参数和if条件,函数将按预期工作。
了解 if
条件是最后计算的表达式,并将返回类型设置为 Unit
.
我试过了 val
定义(和其他变体)没有成功。
代码:
def createSchema (name: String) : StructType = {
val struct: StructType = if (name == "test01") {
StructType(
List(
StructField("id", StringType, true),
StructField("score", DoubleType, true)
))}
struct
}
生产:
error: type mismatch;
found : Unit
required: org.apache.spark.sql.types.StructType
var struct: StructType = if (name == "test01") {
^
感谢您对理解类型不匹配错误和解决方案的帮助。
使用if(作为学习练习)测试函数的解决方案。
代码:
def createSchema (name: String) : StructType = {
val struct = if (name == "test01") {
StructType(
List(
StructField("id", StringType, true),
StructField("score", DoubleType, true)
))
}
else {
StructType(
List(
StructField("col1", StringType, true),
StructField("col2", StringType, true)
))
}
struct
}
谢谢你的帮助和解释。
1条答案
按热度按时间s5a0g9ez1#
因为您没有定义else条件,所以它返回所有分支的最小公共超类型,即
Unit
. 请记住,if条件也可能不是真的,这意味着方法的主体是空的(=unit)。你可以通过输入
进入您的scala repl以查看是否重新运行:
声明一个else条件,或者,在执行此操作时,删除if条件。