NoSuchMethodError:org.apache.spark.sql.SQLContext.applySchema
Posted
技术标签:
【中文标题】NoSuchMethodError:org.apache.spark.sql.SQLContext.applySchema【英文标题】:NoSuchMethodError: org.apache.spark.sql.SQLContext.applySchema 【发布时间】:2015-06-15 02:35:48 【问题描述】:我正在尝试使用以下代码使用 Apache Spark 中提供的 sqlcontext 查询存储在 hdfs 中的文件,但我得到了 NoSuchMethodError
package SQL
import org.apache.spark.SparkContext
import org.apache.spark.sql._
object SparSQLCSV def main(args: Array[String])
val sc = new SparkContext("local[*]","home")
val sqlContext = new org.apache.spark.sql.SQLContext(sc)
val people = sc.textFile("/home/devan/Documents/dataset/peoplesTest.csv")
val delimiter = ","
val schemaString = "a,b".split(delimiter)//csv header
//Automated Schema creation
val schema = StructType(schemaString.map(fieldName => StructField(fieldName, StringType, true)))
val peopleLines = people.flatMap(x=> x.split("\n"))
val rowRDD = peopleLines.map(p=>
Row.fromSeq(p.split(delimiter))
)
val peopleSchemaRDD = sqlContext.applySchema(rowRDD, schema)
peopleSchemaRDD.registerTempTable("people")
sqlContext.sql("SELECT b FROM people").foreach(println)
线程“主”java.lang.NoSuchMethodError 中的异常: org.apache.spark.sql.SQLContext.applySchema(Lorg/apache/spark/rdd/RDD;Lorg/apache/spark/sql/types/StructType;)Lorg/apache/spark/sql/DataFrame; 在 scalding.Main_Obj$.main(Main_Obj.scala:34) 在 scalding.Main_Obj.main(Main_Obj.scala) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:606) 在 org.apache.spark.deploy.SparkSubmit$.launch(SparkSubmit.scala:358) 在 org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:75) 在 org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
我已经尝试使用 spark 中提供的命令行进行相同的操作,它可以工作,但是当我创建一个 scala 项目并尝试运行它时,我得到了上述错误。我做错了什么?
【问题讨论】:
尝试将 `val rowRDD = peopleLines.map(p=> Row.fromSeq(p.split(delimiter)) )` 更改为 `val rowRDD = peopleLines.map(p=> Row .fromSeq(Seq(p.split(delimiter))) )` 【参考方案1】:NoSuchMethodError
通常意味着您在库之间存在不兼容问题。在这种特殊情况下,您可能正在使用需要 Spark 1.3 和旧版 Spark 的 spark-csv 版本。
【讨论】:
以上是关于NoSuchMethodError:org.apache.spark.sql.SQLContext.applySchema的主要内容,如果未能解决你的问题,请参考以下文章
NoSuchMethodError(NoSuchMethodError:方法'[]'在null上被调用。接收者:null尝试调用:[](“title”))