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”))

NoSuchMethodError:null 上的无效成员:'length'

NoSuchMethodError,小部件库捕获的异常

NoSuchMethodError - 颤振[重复]

hadoop

接缝测试 NoSuchMethodError