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返回的两个表达式包装到LeftRight中:

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
}

LeftRight分为两类,均来自Either。您可以使用new Left(expression)new Right(expression)创建实例。由于它们都是case类,因此可以省略new关键字,只需使用Left(expression)Right(expression)即可。

以上是关于Scala要么[type1,type2]的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 中创建正则表达式 [关闭]

第23讲: Scala高阶函数实战详解

sql

C ++中的变体变体

map

自动将按值传递更改为按引用传递