我试图在Spark中编写非常简单的脚本(使用Scala)来编写和读取镶木地板文件。使用此example我写了以下代码:
package com.mygroup
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf
import org.apache.spark.sql
object SimpleApp {
def main(args: Array[String]): Unit = {
val logFile = "C:/MyDocs/test.txt" // Should be some file on your system
val conf = new SparkConf().setAppName("Simple Application").setMaster("local[*]")
val sc = new SparkContext(conf)
//Tutorial to count words in a file
val logData = sc.textFile(logFile, 2).cache()
val numAs = logData.filter(line => line.contains("a")).count()
val numBs = logData.filter(line => line.contains("b")).count()
println(s"Lines with a: $numAs, Lines with b: $numBs")
//HERE STARTS THE PROBLEMATIC PART
val sqlContext = new org.apache.spark.sql.SQLContext(sc)
import sqlContext.implicits._
//Open a parquet file
//logData.write.parquet("logData.parquet")
sc.stop()
}
}
但是在val sqlContext = new org.apache.spark.sql.SQLContext(sc)
中我收到以下错误消息:
糟糕的象征性参考。 SQLContext.class中的签名是指术语 包org.apache.spark中的内部函数不可用。它可能是 从当前的类路径或者上的版本完全丢失 classpath可能与编译时使用的版本不兼容 SQLContext.class。
据我所知,问题可能是我没有在编译器和类路径之间添加正确的依赖项或版本不兼容。
我的pom.xml具有以下依赖项:
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.10</artifactId>
<version>1.6.2</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.10</artifactId>
<version>2.0.0</version>
</dependency>
</dependencies>
不确定spark-sql_2.10
是否是正确的工件。在这里,我的项目中添加了一个显示spark-sql_2.10的图像。
从此link我了解到SQLContext自1.3.0起可用。我正在使用Scala安装2.10.6(内置)和目标jvm 1.6。所以这应该不是问题。
如果它可能是相关的我也使用[J2SE - 1.5]而我的IDE是Spring Tool Suite 3.8.2(Eclipse)
谁能告诉我我错过了什么?
改为:
后解决了<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.10</artifactId>
<version>2.1.0</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.10</artifactId>
<version>2.1.0</version>
</dependency>
在Error:scalac:错误的符号引用之后的解决方案。 SQLContext.class中的签名是指org.apache.spark包中的Logging类型,该类型不可用
所以我的问题应该标记为重复
答案 0 :(得分:1)
我不会同时依赖于spark-sql 2.0.0和spark-core 1.6.2。调整你的依赖关系。