如何在IntelliJ IDEA中创建Spark / Scala项目(无法解析build.sbt中的依赖项)?

时间:2017-07-16 22:54:51

标签: scala apache-spark intellij-idea sbt apache-spark-sql

我正在尝试在IntelliJ IDEA中构建和运行Scala / Spark项目。

我在全局库中添加了org.apache.spark:spark-sql_2.11:2.0.0,我的build.sbt如下所示。

name := "test"

version := "1.0"

scalaVersion := "2.11.8"

libraryDependencies += "org.apache.spark" % "spark-core_2.11" % "2.0.0"
libraryDependencies += "org.apache.spark" % "spark-sql_2.11" % "2.0.0"

我仍然收到错误消息

  

未知神器。无法解析或编入索引

<{1>}下的

尝试构建项目时,错误是

  

错误:(19,26)未找到:输入sqlContext,val sqlContext = new sqlContext(sc)

我不知道问题是什么。如何在IntelliJ IDEA中创建Spark / Scala项目?

更新: 根据建议我更新了代码以使用spark-sql,但它仍然无法读取csv文件。我在这做错了什么?谢谢!

Spark Session

2 个答案:

答案 0 :(得分:1)

sql应该是大写字母,如下所示

val sqlContext = new SQLContext(sc)
对于较新版本的spark,

SQLContext已被弃用,因此我建议您使用SparkSession

val spark = SparkSession.builder().appName("testings").getOrCreate 
val sqlContext = spark.sqlContext

如果您想通过代码而不是master命令设置spark-submit,那么您也可以设置.master(您也可以设置configs

val spark = SparkSession.builder().appName("testings").master("local").config("configuration key", "configuration value").getOrCreate 
val sqlContext = spark.sqlContext

<强>更新

查看您的示例数据

DATE|PID|TYPE
8/03/2017|10199786|O

并测试您的代码

val testdf = spark.read.csv("/Users/H/Desktop/S_CR_IP_H.dat")
testdf.show()

我的输出为

+--------------------+
|                 _c0|
+--------------------+
|       DATE|PID|TYPE|
|8/03/2017|10199786|O|
+--------------------+

现在为.optiondelimiter添加header

val testdf2 = spark.read.option("delimiter", "|").option("header", true).csv("/Users/H/Desktop/S_CR_IP_H.dat")
testdf2.show()

输出

+---------+--------+----+
|     DATE|     PID|TYPE|
+---------+--------+----+
|8/03/2017|10199786|   O|
+---------+--------+----+

注意:我已将.master("local")用于SparkSession对象

答案 1 :(得分:1)

(这应该是Spark官方文档的一部分)

build.sbt中的配置中替换以下内容:

scalaVersion := "2.11.8"

libraryDependencies += "org.apache.spark" % "spark-core_2.11" % "2.0.0"
libraryDependencies += "org.apache.spark" % "spark-sql_2.11" % "2.0.0"

以下内容:

// the latest Scala version that is compatible with Spark
scalaVersion := "2.11.11"

// Few changes here
// 1. Use double %% so you don't have to worry about Scala version
// 2. I doubt you need spark-core dependency
// 3. Use the latest Spark version
libraryDependencies += "org.apache.spark" %% "spark-sql" % "2.2.0"

不要担心IntelliJ IDEA会告诉您以下内容:

  

未知神器。无法解析或编入索引

这只是你必须忍受的东西,我能找到的唯一解决方案就是......接受烦恼。

  

val sqlContext = new sqlContext(sc)

实际类型为SQLContext,但正如scaladoc所说:

  

从Spark 2.0开始,它被SparkSession取代。但是,为了向后兼容,我们保留了这个类。

请改用SparkSession

  

使用Dataset和DataFrame API编程Spark的切入点。

请参阅Spark官方文档,阅读SparkSession和其他好东西。从Getting Started开始。 玩得开心!