spark使用本地local模式时pom.xml的配置
1、本地local模式启动SparkSession我写了个脚本做使用本地local模式启动SparkSession,想做个简单的代码测试,如下://in scalapackage com.Toby.Gaoimport org.apache.spark.sql.SparkSessionobject Test {def main(args:Array[String]){val spark = Spar
1、本地local模式启动SparkSession
我写了个脚本做使用本地local模式启动SparkSession,想做个简单的代码测试,如下:
//in scala
package com.Toby.Gao
import org.apache.spark.sql.SparkSession
object Test {
def main(args:Array[String]){
val spark = SparkSession
.builder()
.master("local[2]")
.enableHiveSupport()
.appName("Test")
.getOrCreate()
spark.createDataFrame(
Seq((1,"Hello world"),
(2,"Toby Gao")
)).toDF("id","words").show()
}
}
2、报错提示
但是报了这样的错误:
Connected to the target VM, address: '127.0.0.1:64367', transport: 'socket'
Exception in thread "main" java.lang.NoClassDefFoundError: scala/reflect/api/TypeCreator
at com.Toby.Gao.Test.main(Test.scala)
Caused by: java.lang.ClassNotFoundException: scala.reflect.api.TypeCreator
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:355)
at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
... 1 more
Disconnected from the target VM, address: '127.0.0.1:64367', transport: 'socket'
我完全不知道这是什么错误,网上也查不到有相同错误的。
问了周围同事才知道这是spark启动本地模式的时候,需要的一些依赖需要自己在pom文件中配置下才行,否则它找不到Class、Def 自然就无法启动。
3、那么我们要如何解决这个问题呢?要在POM文件中配置什么呢?
我们需要在pom.xml文件中配置下如下依赖:
(1)spark-core的版本
(2)spark-sql的版本
(3)spark-hive的版本
(4)jackson-module-scala的版本
(5)hadoop-mapreduce-client-core
(6)hadoop-common的版本
对应的配置方法为在 <dependencies>...</dependencies> 中添加下列依赖:
<dependencies>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_${spark.version.scala}</artifactId>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_${spark.version.scala}</artifactId>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-hive_${spark.version.scala}</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-scala_${spark.version.scala}</artifactId>
<version>2.9.8</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-mapreduce-client-core</artifactId>
<version>2.7.2</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.7.2</version>
</dependency>
...
</dependencies>
注意:这里我引用了一个变量 ${spark.version.scala}。为了使这个变量生效,我们还需要在<properties>中配置下。
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<common.data.master.version>2.0.0-SNAPSHOT</common.data.master.version>
<spark.version.scala>2.11</spark.version.scala>
</properties>
当然如果你嫌麻烦,你可以直接用scala版本2.11 填到上面需要版本的地方,这样就不用在<properties>中配置了。
4、问题解决
POM文件中配置完上面的依赖后,就可以启动SparkSession进行运算了。
下面的运行日志截图中红色的部分是启动SparkSession时产生的日志,下面的DF是结果。
更多推荐
所有评论(0)