开发者社区> 问答> 正文

Scala [type1,type2]

社区小助手 2018-12-12 14:31:03 388

以下是使用Either的一个工作示例:

val a: Either[Int, String] = {
if (true)

Left(42) // return an Int

else

Right("Hello, world") // return a String

}
但是下面的代码不起作用:条件“text”只是确定输入文件是文本文件还是parquet文件

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

}
它给我类型不匹配错误:

: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
                                  ^

: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
分布式计算 Scala
分享到
取消 提交回答
全部回答(1)
  • 社区小助手
    2019-07-17 23:20:12

    你的工作示例准确地告诉您,该做什么。只是包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)。

    0 0
+ 订阅

大数据计算实践乐园,近距离学习前沿技术

推荐文章
相似问题
推荐课程