Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 导入spark.implicits.\未使用_Scala_Apache Spark_Apache Spark Sql_Spark Dataframe - Fatal编程技术网

Scala 导入spark.implicits.\未使用

Scala 导入spark.implicits.\未使用,scala,apache-spark,apache-spark-sql,spark-dataframe,Scala,Apache Spark,Apache Spark Sql,Spark Dataframe,我有一个使用以下代码创建的数据帧 val SomeCsv = spark.read.option("header", "true"). csv(conf.getString("data.path.Somecsv")).toDF() 我有一个函数(到目前为止没有做任何事情)看起来像这样 def cleanUp(data: sql.DataFrame): sql.DataFrame = { data.map({ doc => ( doc

我有一个使用以下代码创建的数据帧

val SomeCsv = spark.read.option("header", "true").
  csv(conf.getString("data.path.Somecsv")).toDF()
我有一个函数(到目前为止没有做任何事情)看起来像这样

def cleanUp(data: sql.DataFrame): sql.DataFrame = {
  data.map({
    doc =>
      (
        doc

        )
  })
}
编译时出现以下错误:

找不到数据集中存储的类型的编码器。导入spark.implicits支持基本类型(Int、String等)和产品类型(事例类)

我已经按照其他帖子的建议设置了进口声明

val spark = SparkSession.builder...etc
import spark.implicits._
IntelliJ将导入语句标记为未使用

我猜是这样

1.)csv加载代码使用的编码器是对象而不是原语

2.)和/或我需要在函数语句中指定dataframe的数据类型,就像您使用RDD一样?我在Spark文档中找不到有关此的任何信息

编辑

如果我改用

val SomeOtherCsv = SomeCsv.map(t => t(0) + "foobar")
import语句触发,所有内容都可以很好地编译。我现在的问题是,相同数据上的方法版本(如上)仍然会中断

编辑2

这是MCVE

import org.apache.spark._
import org.apache.spark.SparkContext
import org.apache.spark.sql.SparkSession
import org.apache.spark.sql._/*statement unused*/
import com.typesafe.config.ConfigFactory

object main {
  def main(args: Array[String]) = {
    /*load spark conf*/
    val sparkConf = new SparkConf().setAppName("main")
    val sc = new SparkContext(sparkConf)
    /*load configure tool*/
    val conf = ConfigFactory.load()
    /*load spark session*/
    val spark = SparkSession.builder.
      master("local")
      .appName("tester")
      .getOrCreate()
    import spark.implicits._/* is used for val ProcessedGenomeCsv but not testFunction*/
    /*load genome csv as dataframe, conf.getString points to application.conf which contains a local directory for the csv file*/
    val GenomeCsv = spark.read.option("header", "true").
      csv(conf.getString("data.path.genomecsv")).toDF()
    /*cleans up segment names in csv so the can be matched to amino data*/
    def testFunctionOne(data: sql.DataFrame): sql.DataFrame = {/* breaks with import spark.implicits._ error, error points to next line "data.map"*/
      data.map({
        doc =>
          (
            doc

            )
      })
    }
    val ProcessedGenomeCsv = GenomeCsv.map(t => t(12) + "foobar")/* breaks when adding sqlContext and sqlContext.implicits._, is fine otherwise*/
    val FunctionProcessedGenomCsv = testFunctionOne(GenomeCsv)
    ProcessedGenomeCsv.take(1).foreach(println)
    FunctionProcessedGenomCsv.take(1).foreach(println)
  }
}

您需要sqlContext.implicits_

您希望在创建sqlContext后声明它(sqlContext已在spark shell中为您创建,但不是在spark submit中创建)

您希望它看起来像这样:

object Driver {
    def main(args: Array[String]):Unit = {
        val spark_conf =
          new SparkConf()
            .set("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
            .setAppName("Spark Tika HDFS")
        val sc = new SparkContext(spark_conf)

        import sqlContext.implicits._

        val df = ....

    }
}

您需要sqlContext.implicits_

您希望在创建sqlContext后声明它(sqlContext已在spark shell中为您创建,但不是在spark submit中创建)

您希望它看起来像这样:

object Driver {
    def main(args: Array[String]):Unit = {
        val spark_conf =
          new SparkConf()
            .set("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
            .setAppName("Spark Tika HDFS")
        val sc = new SparkContext(spark_conf)

        import sqlContext.implicits._

        val df = ....

    }
}

使用import sqlContext.implicits.uu不会修复编译错误,现在还会破坏我在上面添加的csv.map函数。我相信这是因为sqlContext是一种不推荐使用的支持SparkSession(我正在使用)的方法。我刚刚注意到,内嵌的csv.map函数现在触发import spark.implicits.\语句,这很好。当我将其作为方法编写时,它不起作用。使用import sqlContext.implicits.\u不会修复编译错误,现在也会破坏我上面添加的csv.map函数。我相信这是因为sqlContext是一种不推荐使用的支持SparkSession(我正在使用)的方法。我刚刚注意到,内嵌的csv.map函数现在触发import spark.implicits.\语句,这很好。当我把它作为一种方法来写的时候,它就是不起作用。你能提供一个MVCE让我们试着帮助吗?补充说,谢谢。我是斯塔克的新手,您是否尝试过在def中添加导入?您能否提供MVCE,以便我们可以尝试提供帮助?补充说,谢谢。我是新来的,你试过在def中添加导入吗?