Intellij IDEA编写Spark应用程序超详细步骤(IDEA+Maven+Scala)_idea怎么写spark-程序员宅基地

技术标签: spark  scala  maven  大数据  

本文介绍Intellij IDEA编写Spark应用程序,读取hdfs上的文件,进行文件的词频统计,项目使用maven构建。

一、安装Scala插件
依次选择File->Settings->Plugins,在Marketplace中搜索scala进行安装,安装后根据提示重启IDEA。
在这里插入图片描述
二、创建maven项目
1.File->New->Project,选择Maven,点next
在这里插入图片描述

2.输入项目的名字,设置想要的GroupId,当然也可以不设置,然后Finish
在这里插入图片描述

三、添加pom依赖
1.在服务器spark安装目录下输入./bin/spark-shell,查看spark和Scala的版本
在这里插入图片描述

2.pom.xml文件添加代码,把spark.version和scala.version改成自己的版本

<properties>
    <spark.version>2.1.0</spark.version>
    <scala.version>2.11</scala.version>
  </properties>
  <dependencies>
    <dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-core_${
    scala.version}</artifactId>
      <version>${
    spark.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-streaming_${
    scala.version}</artifactId>
      <version>${
    spark.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-sql_${
    scala.version}</artifactId>
      <version>${
    spark.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-hive_${
    scala.version}</artifactId>
      <version>${
    spark.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-mllib_${
    scala.version}</artifactId>
      <version>${
    spark.version}</version>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <groupId>org.scala-tools</groupId>
        <artifactId>maven-scala-plugin</artifactId>
        <version>2.15.2</version>
        <executions>
          <execution>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

修改后的pom文件如下图,然后点击图中红框的Reload Maven按钮
在这里插入图片描述
四、编写程序
1.依次选择File->Project Structure->Global Libaries,添加Scala-sdk
在这里插入图片描述
2.右键项目,在弹出的菜单中,选择Add Framework Surport ,在左侧有一排可勾选项,找到scala,勾选即可。
在这里插入图片描述
3.将项目中的java文件夹rename为scala,删除resource文件夹,创建package:com.spark.wordcount,然后创建Scala class,选择object类型
在这里插入图片描述
创建好后的项目结构如下:
在这里插入图片描述

4.在WordCount.scala文件中编写代码

import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf

object WordCount {
    
  def main(args: Array[String]) {
    
    val inputFile =  "hdfs://39.106.229.57:9000/home/spark/users.txt"
    val conf = new SparkConf().setAppName("WordCount").setMaster("local")
    val sc = new SparkContext(conf)
    val textFile = sc.textFile(inputFile)
    val wordCount = textFile.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey((a, b) => a + b)
    wordCount.foreach(println)
  }
}

五、打包到服务器运行
1.先右键运行一下WordCount.scala,运行成功后出现红色的info信息,等待几秒后即可关闭。不进行此步骤的话在服务器运行会出错。

2.点击右边的maven面板,双击lifecycle下的package即可打包
在这里插入图片描述
3.打包完成后的jar包在spark-test1\target目录下,将其上传到服务器,输入下面命令运行jar包

/usr/hdp/spark/bin/spark-submit --class com.spark.wordcount.WordCount /root/codeTest/spark-test1-1.0-SNAPSHOT.jar
代码解析:

  1. /usr/hdp/spark/bin/spark-submit:使用安装spark的目录中的spark-submit

  2. –class com.spark.wordcount.WordCount:class后面的是WordCount的引用,获得方法如下:
    在这里插入图片描述

  3. /root/codeTest/spark-test1-1.0-SNAPSHOT.jar:服务器中jar包存放的位置

如果不执行步骤一 ,运行jar包会出现以下错误:

java.lang.ClassNotFoundException: com.spark.wordcount.WordCount
        at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:348)
        at org.apache.spark.util.Utils$.classForName(Utils.scala:229)
        at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:700)
        at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:187)
        at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:212)
        at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:126)
        at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)

执行了步骤一即可运行成功:
在这里插入图片描述
输出的信息有点多,往下拉即可看到结果:
在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Wing_kin666/article/details/111246201

智能推荐

Android初步进阶之通知Notification_notificationchannel setfullscreenintent-程序员宅基地

文章浏览阅读143次。我了解到的通知,可以有三种展示类型,分别为普通通知、悬挂通知和折叠通知。而我们可以常用自定义视图、触发事件和权限等对它进行设置,个性化。下面介绍一个普通的通知的构建。示例代码:普通通知//触发事件 val mIntent:Intent = Intent(Intent.ACTION_VIEW, Uri.parse("http://www.baidu.com")) //通知管理器 val manager:Notification_notificationchannel setfullscreenintent

CentOS6.5源码安装MySQL5.6.35_源码安装mysql5.5.36-程序员宅基地

文章浏览阅读888次。原文地址:http://www.cnblogs.com/ShanFish/p/6531365.html参考地址:http://blog.csdn.net/1099564863/article/details/51622709http://blog.csdn.net/wendi_0506/article/details/39478369http://www.cnblogs.c_源码安装mysql5.5.36

Dart从入门到入土【持续更新】_dart教程-程序员宅基地

文章浏览阅读1k次,点赞3次,收藏7次。Flutter入门语言Dart从0开始入门到入土保姆级教学_dart教程

一文详解微服务架构,通俗易懂,看到很多人给了这篇文章很高的评价,转载推荐分享给大家-程序员宅基地

文章浏览阅读723次,点赞13次,收藏18次。面试题文档来啦,内容很多,485页!由于笔记的内容太多,没办法全部展示出来,下面只截取部分内容展示。

cocos2d 制作fnt 批量缩放png ios 批量制作图标 gamedevkit 支持windows, mac_fnt mac-程序员宅基地

文章浏览阅读2.1k次。0.制作了一个简单软件这个软件有4个功能:批量缩放png图片根据美术给的数字小图等,制作fnt字体文件供cocos2d使用批量制作ios 图标和android 图标(只需传入一张图片)截图制作,传入5张IPhone6+的截图,生成IPhone5,IPhone6的截图(这个功能没什么用,不过当你个人开发制作20+个游戏的时候,就能省点力)下面是具体功能介绍。。。当然这个软件暂定为收费。1. coco_fnt mac

ZZ 什么是Shingling算法 网页去重——Shingling 算法-程序员宅基地

文章浏览阅读221次。什么是Shingling算法 网页去重——Shingling 算法  shingling算法用于计算两个文档的相似度,例如,用于网页去重。维基百科对w-shingling的定义如下:   In natural language processing a w-shingling is a set of unique "shingles"—contiguous subsequence..._shingle和超级shingle的网页去重

随便推点

100个网站需要的服务器配置,100并发服务器需要什么配置-程序员宅基地

文章浏览阅读1.5k次。100并发服务器需要什么配置 内容精选换一换压测是需要模拟用户实际业务操作的真实使用场景,那么并发用户数是模拟一定数量用户操作的一个配置。例如,游戏网站某个时间点进行竞技活动,那么这个时候对设备的要求肯定是最高的。并发用户数就是模拟成千上万的用户在同一个时间点进行各种操作的配置数。这个时候我们将并发用户数,同时结合并发时间和思考时间来进行计算并发请求的数量,压测出服务器最终饱和数据100开头的IP..._100人的服务器配置

OpenOffice转换Office_openoffice命令行-程序员宅基地

文章浏览阅读300次。【代码】OpenOffice转换Office。_openoffice命令行

基于QtQuick的二维码解码_qrqoqk-程序员宅基地

文章浏览阅读1.7k次。QRDeCode Powered QML ModuleDesigning cool, interactive interfaces. DuoDuoZhijiao came up with a much better answer for QRDeCode: QML, a declarative language perfect for designing UIs (and much more). H_qrqoqk

JDBC简介_jdbc的介绍-程序员宅基地

文章浏览阅读1.2k次。JDBC简介一、JDBC简介JDBC(Java DataBase Connectivity, java 数据库连接)是一种用于执行 SQL 语句的 Java API,可以为多种关系数据库提供统一访问,它由一组用 java 语言编写的类和接口组成。JDBC 提供了一个种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序,同时,JDBC 也是个商标名。jdbc的本质:jdbc是sun公司制定的一套接口(interface)接口都有调用者和实现者。面向接口调用、面向接口写实现_jdbc的介绍

基于SpringBoot+Vue的学生网上选课系统的设计实现(源码+lw+部署文档+讲解等)_vue+springboot学生选课系统-程序员宅基地

文章浏览阅读107次。博主介绍:全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战精彩专栏 推荐订阅2023-2024年最值得选的微信小程序毕业设计选题大全:100个热门选题推荐2023-2024年最值得选的Java毕业设计选题大全:500个热门选题推荐Java精品实战案例《500套》微信小程序项目精品案例《500套》文末获取源码+数据库。_vue+springboot学生选课系统

Package javax.xml.ws_javax.xml.ws.bindingprovider是哪个包 报错-程序员宅基地

文章浏览阅读704次。This package contains the core JAX-WS APIs.See: DescriptionInterface Summary Interface DescriptionAsyncHandler<T> The AsyncHandler interface is implemented by clients that wish to receive..._javax.xml.ws.bindingprovider是哪个包 报错