Scala要么[type1,type2]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Scala要么[type1,type2]相关的知识,希望对你有一定的参考价值。
以下是使用Either的一个工作示例:
val a: Either[Int, String] = {
if (true)
Left(42) // return an Int
else
Right("Hello, world") // return a String
}
但是下面的代码不起作用:条件“text”只是确定输入文件是文本文件还是镶木地板文件
val a: Either[org.apache.spark.rdd.RDD[String], org.apache.spark.rdd.RDD[org.apache.spark.sql.Row]] = {
if (text)
spark.sparkContext.textFile(input_path + "/lineitem.tbl") // read in text file as rdd
else
sparkSession.read.parquet(input_path + "/lineitem").rdd //read in parquet file as df, convert to rdd
}
它给我类型不匹配错误:
<console>:33: error: type mismatch;
found : org.apache.spark.rdd.RDD[String]
required: scala.util.Either[org.apache.spark.rdd.RDD[String],org.apache.spark.rdd.RDD[org.apache.spark.sql.Row]]
spark.sparkContext.textFile(input_path + "/lineitem.tbl") // read in text file as rdd
^
<console>:35: error: type mismatch;
found : org.apache.spark.rdd.RDD[org.apache.spark.sql.Row]
required: scala.util.Either[org.apache.spark.rdd.RDD[String],org.apache.spark.rdd.RDD[org.apache.spark.sql.Row]]
sparkSession.read.parquet(input_path + "/lineitem").rdd //read in parquet file as df, convert to rdd
答案
您的工作示例将准确地告诉您该做什么。只需将Spark返回的两个表达式包装到Left
和Right
中:
val a: Either[org.apache.spark.rdd.RDD[String], org.apache.spark.rdd.RDD[org.apache.spark.sql.Row]] = {
if (text)
Left(spark.sparkContext.textFile(input_path + "/lineitem.tbl")) // read in text file as rdd
else
Right(sparkSession.read.parquet(input_path + "/lineitem").rdd) //read in parquet file as df, convert to rdd
}
Left
和Right
分为两类,均来自Either
。您可以使用new Left(expression)
和new Right(expression)
创建实例。由于它们都是case类,因此可以省略new
关键字,只需使用Left(expression)
和Right(expression)
即可。
以上是关于Scala要么[type1,type2]的主要内容,如果未能解决你的问题,请参考以下文章