使用Scala在Spark中为CSV文件定义架构时出错

时间:2018-09-24 05:59:15

标签: scala apache-spark

我正在尝试在Scala中使用case class将架构定义为CSV文件。

case class userSchema(name : String,
                      place : String,
                      designation : String)
object userProcess {
  val spark = SparkSession.builder().appName("Spark_processing for Hbase").master("yarn").getOrCreate()
  import spark.implicits._
  val colNames = classOf[userSchema].getDeclaredFields.map(f=> f.getName)
    val file = spark.read.option("inferSchema", false).option("header", false).csv("D:\\wSapce\\User.csv").toDF(colNames:_*).as(userSchema)

}

但是在最后一行(对于有价文件),我得到了低于编译时错误的信息:

overloaded method value as with alternatives: (alias: Symbol)org.apache.spark.sql.Dataset[org.apache.spark.sql.Row] <and> (alias: String)org.apache.spark.sql.Dataset[org.apache.spark.sql.Row] <and> [U](implicit evidence$2: org.apache.spark.sql.Encoder[U])org.apache.spark.sql.Dataset[U] cannot be applied to (tavant.user.userSchema.type)

任何想法我为什么会收到此错误...?

1 个答案:

答案 0 :(得分:2)

问题出在下面一行:

val file = spark.read.option("inferSchema", false).option("header", false).csv("D:\\wSapce\\User.csv").toDF(colNames:_*).as(userSchema)

spark.read.option()。csv-将返回DataFrame。您无需再次toDF()即可转换为DataFrame。

您可以使用as(userSchema)方法将具有定义的scehma(案例类)的DataFrame转换为数据集,如下所示:

val file = spark.read.option("inferSchema", false).option("header", false).csv("D:\\wSapce\\User.csv").as(userSchema)