spark sbt error:值toDF不是Seq [DataRow]的成员

Man*_*l G 3 apache-spark apache-spark-sql spark-dataframe

我有一些spark scala代码在spark-shell中没有问题.

这个问题的核心在于这几条线.我想在数据框中添加一行:

object SparkPipeline {

  def main(args: Array[String]) {
    val spark = (SparkSession
        .builder()
        .appName("SparkPipeline")
        .getOrCreate()
        )

    df = (spark
        .read
        .format("com.databricks.spark.avro")
        .load(DATA_PATH)
        )

    case class DataRow(field1: String, field2: String)
    val row_df = Seq(DataRow("FOO", "BAR")).toDF()  // THIS FAILS
    val df_augmented = df.union(row_df)
    //
    // Additional code here
    //
  }
}
Run Code Online (Sandbox Code Playgroud)

但是,当我使用sbt将其打包为jar时,sbt失败并出现以下错误:

value toDF is not a member of Seq[DataRow]
Run Code Online (Sandbox Code Playgroud)

我试着按照这个问题来做:

val spark = (SparkSession
    .builder()
    .appName("TrainSimpleRF")
    .getOrCreate()
    )

val sc = spark.sparkContext
val sqlContext= new org.apache.spark.sql.SQLContext(sc)
import sqlContext.implicits._
Run Code Online (Sandbox Code Playgroud)

哪个不能解决问题.也尝试导入spark.implicits_无济于事.我在main方法中有所有代码.我认为这可能很重要(根据cloudera论坛中的一些答案),但无论我如何构建代码,都无法使其工作.

我如何使其工作?任何帮助都非常受欢迎.

Man*_*l G 10

好吧,我找到了解决办法,如规定这个岗位,我不得不移动类定义的主要功能外,如:

// Define the class DataRow prior to the object with the main method
case class DataRow(field1: String, field2: String)

object SparkPipeline {

  def main(args: Array[String]) {
    val spark = (SparkSession
        .builder()
        .appName("SparkPipeline")
        .getOrCreate()
        )

    df = (spark
        .read
        .format("com.databricks.spark.avro")
        .load(DATA_PATH)
        )


    val row_df = Seq(DataRow("FOO", "BAR")).toDF()  // THIS FAILS
    val df_augmented = df.union(row_df)
    //
    // Additional code here
    //
  }
}
Run Code Online (Sandbox Code Playgroud)

我花了一段时间来处理这个答案,但它在那里.