【发布时间】:2016-09-30 00:26:52
【问题描述】:
我有一个使用以下代码创建的数据框
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.) 和/或我需要在我的函数语句中指定数据帧的数据类型,就像你对 RDD 所做的那样?我在 Spark 文档中找不到这方面的任何信息。
编辑
如果我改为使用
val SomeOtherCsv = SomeCsv.map(t => t(0) + "foobar")
import 语句触发,一切编译良好。我现在的问题是相同数据上的方法版本(以上)仍然中断。
EDIT2
这里是 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)
}
}
【问题讨论】:
-
您能否提供一个 MVCE,以便我们尝试提供帮助? stackoverflow.com/help/mcve
-
已添加,谢谢。我是新手
-
您是否尝试过在 def 中添加导入?
标签: scala apache-spark apache-spark-sql spark-dataframe