【问题标题】:Scala:case class runTime ErrorScala:案例类运行时错误
【发布时间】:2015-07-03 01:10:58
【问题描述】:

这个演示运行正常。但是当我将它移到另一个类函数(我以前的项目)并调用该函数时,它编译失败。

     object DFMain {
         case class Person(name: String, age: Double, t:String)
         def main (args: Array[String]): Unit = {
         val sc = new SparkContext("local", "Scala Word Count")
         val sqlContext = new org.apache.spark.sql.SQLContext(sc)
         import sqlContext.implicits._
         val bsonRDD = sc.parallelize(("foo",1,"female")::
                                        ("bar",2,"male")::
                                     ("baz",-1,"female")::Nil)
                      .map(tuple=>{
                    var bson = new BasicBSONObject()
                    bson.put("name","bfoo")
                    bson.put("value",0.1)
                    bson.put("t","female")
                    (null,bson)
                 })
    val tDf = bsonRDD.map(_._2)
              .map(f=>Person(f.get("name").toString,
                   f.get("value").toString.toDouble,
                   f.get("t").toString)).toDF()

       tDf.limit(1).show()
 }
}

'MySQLDao.insertIntoMySQL()' 编译错误

object MySQLDao {
     private val sc= new SparkContext("local", "Scala Word Count")
     val sqlContext = new org.apache.spark.sql.SQLContext(sc)
     import sqlContext.implicits._

     case class Person(name: String, age: Double, t:String)
     def insertIntoMySQL(): Unit ={

      val bsonRDD = sc.parallelize(("foo",1,"female")::
                                     ("bar",2,"male")::
                                     ("baz",-1,"female")::Nil)
                       .map(tuple=>{
               val bson = new BasicBSONObject()
               bson.put("name","bfoo")
               bson.put("value",0.1)
               bson.put("t","female")
               (null,bson)
         })
 val tDf = bsonRDD.map(_._2).map( f=> Person(f.get("name").toString,
                                           f.get("value").toString.toDouble,
                                            f.get("t").toString)).toDF()

   tDf.limit(1).show()

 }
} 

请问,当我调用 'MySQLDao.insertIntoMySQL()' 时会得到错误

value typedProductIterator 不是对象 scala.runtim.scala.scalaRuntTime 的成员

case class Person(name: String, age: Double, t:String)

【问题讨论】:

  • 奇怪的错误。这是一个 Scala 编译器错误。它是在编译代码时出现还是在运行时出现?另外,尝试使示例独立,以便人们可以重现错误。例如,未定义 BasicBSONObject。
  • 是的,这是编译器错误。对不起,我给你错误的快递。我创建了一个新项目,它只是做了正确的事情。但是,我仍然不知道为什么。
  • 嗨,我正在使用 scala 做一个 spark 项目。但是我的scala很差。你能给我一些建议吗?

标签: scala apache-spark


【解决方案1】:

我想在 map 函数内部的闭包中看不到 case 类。将其移至包级别。

case class Person(name: String, age: Double, t:String)
object MySQLDao {
...
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-08
    • 2020-05-09
    • 2018-10-03
    • 2017-09-29
    相关资源
    最近更新 更多