spark使用本地local模式时pom.xml的配置

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是结果。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值