toDF 不是 Seq 的成员,toDS 不是 Seq 的成员

Posted

技术标签:

【中文标题】toDF 不是 Seq 的成员,toDS 不是 Seq 的成员【英文标题】:toDF is not a member of Seq ,toDS is not a member Seq 【发布时间】:2020-03-10 21:45:29 【问题描述】:

我正在尝试使用以下代码将序列转换为数据框或数据集。这似乎很简单,但是这样做时我遇到了异常。不确定我犯了什么错误。我试图找出解决方案类似的问题,根据我将我的类定义移到 main 之外,但我仍然遇到了问题。下面是代码

package sparkWCExample.spWCExample
      import org.apache.log4j.Level
      import org.apache.spark.sql.Dataset, SparkSession , DataFrame , Row , Encoders 
      import org.apache.spark.sql.functions._
      import org.apache.spark.SparkContext
      import org.apache.spark.SparkConf
      import org.apache.spark.sql.Row
      import org.apache.spark.sql.Dataset



      // Create the case classes for our domain
case class Department(id: String, name: String)
case class Person(name: String, age: Long)


object DatasetExample  
             def  main(args: Array[String])
          println("Start now")
          val conf = new SparkConf().setAppName("Spark Scala WordCount Example").setMaster("local[1]")
        val spark = SparkSession.builder().config(conf).appName("CsvExample").master("local").getOrCreate()
        val sqlContext = new org.apache.spark.sql.SQLContext(spark.sparkContext)
        import sqlContext.implicits._
        import spark.implicits._

//val df = spark.read.options(Map("inferSchema"->"true","delimiter"->",","header"->"true")).csv("C:\\Sankha\\Study\\data\\salary.csv")

// Create the Departments
val department1 = new Department("123456", "Computer Science")
val department2 = new Department("789012", "Mechanical Engineering")
val department3 = new Department("345678", "Theater and Drama")
val department4 = new Department("901234", "Indoor Recreation")

val caseClassDS = Seq(Person("Andy", 32)).toDS()
val df = Seq(department1,department2,department3,department4).toDF



        

我使用的是 spark 2.4.5 和 scala 2.12,上面的代码是用 scala ide 编写的,下面是异常

toDF 不是 Seq[sparkWCExample.spWCExample.Department 的成员 toDS 不是 Seq[sparkWCExample.spWCExample.Person

的成员

【问题讨论】:

您的代码发生了什么变化?缩进真的很糟糕。顺便说一句,这段代码在我的环境中工作。请尝试使用spark,您不需要设置sqlContext。 【参考方案1】:
import org.apache.spark.SparkConf, SparkContext
import org.apache.spark.sql.DataFrame, Dataset, SparkSession

// Create the case classes for our domain
case class Department(id: String, name: String)
case class Person(name: String, age: Long)

object DatasetExample 

  def main(args: Array[String]) 
    println("Start now")
    val conf = new SparkConf().setAppName("Spark Scala WordCount Example").setMaster("local[1]")
    val spark = SparkSession.builder().config(conf).appName("CsvExample").master("local").getOrCreate()
    val sc: SparkContext = spark.sparkContext
    import spark.implicits._

    //val df = spark.read.options(Map("inferSchema"->"true","delimiter"->",","header"->"true")).csv("C:\\Sankha\\Study\\data\\salary.csv")

    // Create the Departments
    val department1 = Department("123456", "Computer Science")
    val department2 = Department("789012", "Mechanical Engineering")
    val department3 = Department("345678", "Theater and Drama")
    val department4 = Department("901234", "Indoor Recreation")

    val caseClassDS: Dataset[Person] = Seq(Person("Andy", 32)).toDS()
    val df: DataFrame = Seq(department1, department2, department3, department4).toDF

  

您使用了已弃用的 Spark 上下文和初始化,并且我清理了许多未使用的导入。 代码本身很好,唯一的问题是在 spark 上下文中。

PS:我建议你看一下 spark 文档以便更好地理解。

【讨论】:

虽然此代码可以解决问题,including an explanation 说明如何以及为什么解决问题将真正有助于提高您的帖子质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提问的人。请edit您的回答添加解释并说明适用的限制和假设。 我使用了您的代码,它解决了问题。感谢您的帮助。所以只是为了更好地理解已弃用的 spark 上下文和初始化问题?而不是直接spark.sparkContext 应该是val sc: SparkContext = spark.sparkContext 那才是真正的问题???请指教

以上是关于toDF 不是 Seq 的成员,toDS 不是 Seq 的成员的主要内容,如果未能解决你的问题,请参考以下文章

sbt编译spark程序提示value toDF is not a member of Seq()

值 toDF 不是成员 org.apache.spark.rdd.RDD

值 toDS 不是 org.apache.spark.rdd.RDD 的成员

值 toDF 不是 org.apache.spark.rdd.RDD 的成员

值 toDF 不是 org.apache.spark.rdd.RDD[(Long, org.apache.spark.ml.linalg.Vector)] 的成员

toDS() 如何注入到 Seq 对象中[重复]