【发布时间】:2017-08-24 12:16:16
【问题描述】:
我正在尝试在 Spark(使用 Scala)中编写非常简单的脚本来编写和读取 parquet 文件。使用这个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 中的内部不可用。它可能是 当前类路径或 类路径可能与编译时使用的版本不兼容 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)
谁能告诉我我错过了什么?
改成后ok解决了:
<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: bad symbolic reference 中的解决方案。 SQLContext.class 中的签名是指包 org.apache.spark 中不可用的类型 Logging
所以我的这个问题应该被标记为重复
【问题讨论】:
标签: scala maven apache-spark