apache-spark之找不到类型为 org.apache.spark.sql.Encoder[String] 的证据参数的隐式值

pengyingh 阅读:138 2025-06-02 22:19:02 评论:0

我正在尝试将数据框加载到 Hive 表中。

import org.apache.spark.sql.SparkSession 
import org.apache.spark.sql.SaveMode 
import org.apache.spark.sql._ 
 
object SparkToHive { 
  def main(args: Array[String]) { 
    val warehouseLocation = "file:${system:user.dir}/spark-warehouse" 
    val sparkSession = SparkSession.builder.master("local[2]").appName("Saving data into HiveTable using Spark") 
                        .enableHiveSupport() 
                        .config("hive.exec.dynamic.partition", "true") 
                        .config("hive.exec.dynamic.partition.mode", "nonstrict") 
                        .config("hive.metastore.warehouse.dir", "/user/hive/warehouse") 
                         .config("spark.sql.warehouse.dir", warehouseLocation) 
                        .getOrCreate() 
    **import sparkSession.implicits._** 
    val partfile = sparkSession.read.text("partfile").as[String] 
 
    val partdata = partfile.map(part => part.split(",")) 
    case class Partclass(id:Int, name:String, salary:Int, dept:String, location:String) 
    val partRDD  = partdata.map(line => PartClass(line(0).toInt, line(1), line(2).toInt, line(3), line(4))) 
    val partDF   = partRDD.toDF() 
    partDF.write.mode(SaveMode.Append).insertInto("parttab") 
  } 
} 

我还没有执行它,但我在这一行收到以下错误:

import sparkSession.implicits._ 
could not find implicit value for evidence parameter of type org.apache.spark.sql.Encoder[String] 

我该如何解决这个问题?

请您参考如下方法:

请将您的case class Partclass 移到SparkToHive 对象之外。那应该没问题

并且在你的implicits import语句中有**。尝试

import sparkSession.sqlContext.implicits._ 


标签:Spark
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号