Scala Either [тип1, тип2] - PullRequest
       8

Scala Either [тип1, тип2]

0 голосов
/ 17 ноября 2018

Вот рабочий пример использования Either:

val a: Either[Int, String] = {
if (true) 
    Left(42) // return an Int
else
    Right("Hello, world") // return a String
}

Но нижеприведенное не работает: условие «текст» просто для определения, является ли входной файл текстовым файлом или файлом паркета

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

1 Ответ

0 голосов
/ 17 ноября 2018

Ваш рабочий пример говорит вам точно, что делать.Просто оберните эти два выражения, возвращаемые 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).Поскольку оба они являются классами падежей, ключевое слово new можно опустить, и вы просто используете Left(expression) и Right(expression).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...