使用Intellij idea编写Spark应用程序(Scala+Maven)

使用Intellij idea编写Spark应用程序(Scala+Maven)

对Scala代码进行打包编译时,可以采用Maven,也可以采用sbt,相对而言,业界更多使用sbt。这里介绍IntelliJ IDEA和Maven的组合使用方法。IntelliJ IDEA和SBT的组合使用方法,请参考“使用Intellij Idea编写Spark应用程序(Scala+SBT)”。

安装 IntelliJ IDEA

本次运行系统为Ubuntu16.04。

我们可以访问官网下载安装包。文件较大,一般需要20分钟左右。有两种下载选择,我们选择下载正版,教程将使用试用版的idea。

下载后,我们把压缩包解压并且改名。

cd ~/下载sudo tar -zxvf ideaIU-2016.3.4.tar.gzsudo mv idea-IU-163.12024.16 /usr/local/Intellij

然后打开Intellij文件夹,并且使用其bin文件夹下的idea.sh打开程序。

cd /usr/local/Intellij/bin./idea.sh

会出现如图界面。
intellIJ idea 开发 Spark程序

选择Ecalute for free进入免费试用版。
接下来要把程序放到启动栏里快捷启动。
首先进入到applications文件夹下,并且编辑idea.desktop文件

cd /usr/share/applicationssudo gedit idea.desktop

在打开的文档里添加如下内容

[Desktop Entry]Encoding=UTF-8Version=1.0Name=IntelliJ IDEAGenericName=Java IDEComment=IntelliJ IDEA is a code-centric IDE focused on developer    productivity. The editor deeply understands your code and knows its way around the codebase, makes great suggestions right when you need them, and is always ready to help you shape your code.Exec=/usr/local/Intellij/bin/idea.shIcon=/usr/local/Intellij/bin/idea.pngTerminal=falseType=ApplicationCategories=Development;IDE

然后在启动栏里选择查找程序的那个应用(一般在启动栏第一个)。搜索Intellij即可找到程序,点击就可以启动idea。这时候就可以把程序锁定到启动栏使用了。如果搜索没找到,请重启系统。

在Intellij里安装scala插件,并配置JDK,scala SDK

首先如图打开plugins界面。
intellIJ Idea plugins界面

然后我们点击Install JetBrain Plugins…如下图

安装JetBrain插件

搜索并安装scala。
等待安装完成后我们就可以配置JDK跟scala SDK。

配置JDK

首先打开 Project Structure,如下图。
IntellIJ Idea 配置JDK

添加JDK(这里默认已经安装JDK并且配置了环境变量),操作按下面两张图。
添加JDK

配置JDK

配置全局Scala SDK

还是在Project Structure界面,操作如下。
配置全局scala sdk

配置全局SDK

然后右键已经添加的SDK选择Copy to Project Libraries…OK确认。如图
Copy to Project Libraries

配置好后就可以创建工程文件了。

创建Maven工程文件

点击初始界面的Create New Project进入如图界面。并按图创建Maven工程文件。
intellij创建maven空间

填写GroupId:dblab;以及ArtifactId:WordCount,如图
填写groupid

然后按下图填写各项,这一步容易出错请认真填写。
填写projectname

到此创建工程文件完成。

前置的一些配置

将scala框架添加到项目

在IDEA启动后进入的界面中,可以看到界面左侧的项目界面,已经有一个名称为WordCount的工程。请在该工程名称上右键单击,在弹出的菜单中,选择Add Framework Surport ,在左侧有一排可勾选项,找到scala,勾选即可。

创建WordCount文件夹,并作为sources root

在src文件夹下创建一个WordCount文件夹。
右键新建的文件夹,按图把该文件夹设置为sources root。
source root设置

两次的代码黏贴

黏贴wordcount代码到WordCount.scala

然后就可以通过右键刚刚设置为sources root的wordcount文件夹,就有了new->scala class的选项。
我们新建一个scala class,并且命名WordCount,选着为object类型。
创建scala类

打开建好的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 =  "file:///usr/local/spark/mycode/wordcount/word.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)}
}

黏贴pom.xml代码

现在清空pom.xml,把以下代码黏贴到pom.xml里。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>dblab</groupId><artifactId>WordCount</artifactId><version>1.0-SNAPSHOT</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><goals><goal>compile</goal><goal>testCompile</goal></goals></execution></executions></plugin><plugin><artifactId>maven-compiler-plugin</artifactId><version>3.6.0</version><configuration><source>1.8</source><target>1.8</target></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>2.19</version><configuration><skip>true</skip></configuration></plugin></plugins></build>
</project>

黏贴好后,右键点击工程文件夹,更新一下,按下图操作。
更新文件夹

这时候注意要记得点击右下角的“Import Changes Enables Auto-Import ”中的”Enables Auto-Import”。如图。
enables auto-import

等待一段时间,可以看底部的进度条。等执行完毕,我们再进行后面的操作。

运行WordCount程序

在WordCount.scala代码窗口内的任意位置,右键点击,可以唤出菜单,选择Run ‘WordCount’。运行的结果如下。注意根据代码,你必须有/usr/local/spark/mycode/wordcount/word.txt这个文件。输出信息较多,你可以拖动一下寻找结果信息。

运行wordcount

打包WordCount程序的jar包

首先打开File->Project Structure。如图。
Project Structure

然后选择Artifacts->绿色加号->Jar->From moduleswith dependencies…如图
From moduleswith dependencies

选择Main Class,如图
选择main class

然后因为只是在Spark上运行的,所以要删除下图红框里多余的部分,保留WordCount.jar以及‘WordCount’ compile output。小提示,这里可以利用Ctrl+A全选功能,选中全部选项,然后,配合Crtl+鼠标左键进行反选,也就是按住Ctrl键的同时用鼠标左键分别点击WordCount.jar和‘WordCount’ compile output,从而不选中这两项,最后,点击页面中的删除按钮(是一个减号图标),这样就把其他选项都删除,只保留了WordCount.jar以及‘WordCount’ compile output。
引入jar包

然后点击Apply,再点击OK,如图
引入jar包

接着就可以导出Jar包了。选择Build->Build Artifacts…,在弹出的窗口选择Bulid就可以了。如下图:
程序打包

导出的Jar包会在工程文件“/home/wordcount/”目录下的“out/artifacts/WordCount_jar”目录下。把他复制到/home/hadoop目录下。也就是主文件夹目录下,如下图
scala打包后路径

实际上,可以用命令来复制WordCount.jar文件,请打开一个Linux终端,输入如下命令:

cd ~cp /home/hadoop/WordCount/out/artifacts/WordCount_jar/WordCount.jar /home/hadoop

然后在终端执行以下命令,运行Jar包:

cd ~/usr/local/spark/bin/spark-submit --class WordCount /home/hadoop/WordCount.jar

运行结果如下(输出的信息较多请上下翻一下就能找到),要求还是跟上述一样要有那个文件存在。

spark scala wordcount运行结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/766799.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FANUC机器人零点标定的基本步骤(出厂数据)

FANUC机器人零点标定的基本步骤(出厂数据) FANUC 零点数据存在问题的机器人通常会出现以下几种报警: (1)SRVO-062报警 - 脉冲编码器数据丢失,机器人完全不能动,具体消除方法可参考以下链接中的内容: FANUC机器人SRVO-062报警原因分析及处理对策 (2)SRVO-075报警 -…

自己动手做一个批量doc转换为docx文件的小工具

前言 最近遇到了一个需求&#xff0c;就是要把大量的doc格式文件转换为docx文件&#xff0c;因此就动手做了一个批量转换的小工具。 背景 doc文件是什么&#xff1f; “doc” 文件是一种常见的文件格式&#xff0c;通常用于存储文本文档。它是 Microsoft Word 文档的文件扩…

探索 Flutter 中的 NavigationRail:使用详解

1. 介绍 在 Flutter 中&#xff0c;NavigationRail 是一个垂直的导航栏组件&#xff0c;用于在应用程序中提供导航功能。它通常用于更大屏幕空间的设备&#xff0c;如平板电脑和桌面应用程序。NavigationRail 提供了一种直观的方式来浏览应用程序的不同部分&#xff0c;并允许…

PyStructureFactor:隧道电离率中分子结构因子的 Python 代码

PyStructureFactor&#xff1a;隧道电离率中分子结构因子的 Python 代码 隧道电离是强场和阿秒科学的核心。在本文中&#xff0c;我们提出了PyStructureFactor——一个通用的Python代码&#xff0c;用于计算强激光场下常见分子的隧道电离率的结构因子。数值实现基于积分表示…

004——内存映射(基于鸿蒙和I.MAX6ULL)

目录 一、 ARM架构内存映射模型 1.1 页表项 1.2 一级页表映射过程 1.3 二级页表映射过程 1.4 cache 和 buffer 二、 鸿蒙内存映射代码学习 三、 为板子编写内存映射代码 3.1 内存地址范围 3.2 设备地址范围 一、 ARM架构内存映射模型 &#xff08;以前我以为页表机制…

使用插件将swagger文档转html或pdf

github上有maven开源插件swagger2markup将swagger文档转为.adoc格式的文档&#xff0c;另外一个maven开源插件asciidoctorj-pdf则可以将.adoc格式的文档转为html和pdf。由于GitHub访问不稳定&#xff0c;在gitee上有镜像项目。所以我就贴gitee上的项目地址了。 实现从swagger文…

局域网内的手机、平板、电脑的文件共享

在日常工作生活中&#xff0c;经常需要将文件在手机、平板、电脑间传输&#xff0c;以下介绍三种较为便捷的方法&#xff1a; 1.LocalSend 该软件是免费开源的&#xff0c;可以在局域网内的任意手机、平板、电脑间传递文件&#xff0c;并且任意一方都可以作为“发送方”和“接…

MapReduce学习问题记录

1、如何跳过对某行数据的处理 第一行数据是字段名不需要处理&#xff0c;我们知道第一行偏移量是0&#xff08;行记录的时候是从数组首地址开始&#xff0c;到了行标识符进行一次计数&#xff0c;这个计数就是行偏移量&#xff0c;从0开始&#xff09;&#xff0c;我们根据偏移…

线程池的7大参数

线程池的7大参数 一、 corePoolSize 线程池核心线程大小 核心线程永远不会销毁&#xff0c;即使他们处于空闲状态&#xff0c;除非设置了allowCoreThreadTimeOut。任务提交到线程池后&#xff0c;首先会检查当前线程数是否达到了corePoolSize&#xff0c;如果没有达到的话&…

【绘图案例-奇偶填充规则 Objective-C语言】

一、接下来,我们来学习奇偶填充规则 1.就是说,你在填充的时候,实际上,是有一些规则的, 奇偶填充规则:even-odd rule, even:偶数,odd:奇数 2.把之前的copy代码,复制粘题一份,名字改成“07-奇偶填充规则”, 把ppt里的代码复制粘贴过来, 我们来看一下这段儿代码,…

CSS(一)

一、CSS 简介 1.1 HTML 的局限性 说起 HTML&#xff0c;这其实是个非常单纯的家伙&#xff0c;他只关注内容的语义。比如 <h1> 表明这是一个大标题&#xff0c;<p> 表明这是一个段落&#xff0c;<img> 表明这儿有一个图片&#xff0c;<a> 表示此处有链…

每日一题 --- 设计链表[力扣][Go]

设计链表 题目&#xff1a;707. 设计链表 你可以选择使用单链表或者双链表&#xff0c;设计并实现自己的链表。 单链表中的节点应该具备两个属性&#xff1a;val 和 next 。val 是当前节点的值&#xff0c;next 是指向下一个节点的指针/引用。 如果是双向链表&#xff0c;则…

pytest之统一接口请求封装

pytest之统一接口请求封装 pytest的requests_util.pyrequests_util.py 接口自动化测试框架的封装yaml文件如何实现接口关联封装yaml文件如何实现动态参数的处理yaml文件如何实现文件上传有参数化时候&#xff0c;怎么实现断言yaml的数据量大怎么处理接口自动化框架的扩展&#…

FFmepg--AVFilter过滤器使用以及yuv视频裁剪

文章目录 AVFilter 流程&#xff1a;api核心代码变量yuv视频裁剪 AVFilter 流程&#xff1a; ⾸先使⽤split滤波器将input流分成两路流&#xff08;main和tmp&#xff09;&#xff0c;然后分别对两路流进⾏处理。对于tmp流&#xff0c;先经过crop滤波器进⾏裁剪处理&#xff0c…

Kotlin零基础入门到进阶实战

教程介绍 Kotlin现在是Google官方认定Android一级开发语言&#xff0c;与Java100%互通&#xff0c;并具备诸多Java尚不支持的新特性&#xff0c;每个Android程序员必备的Kotlin课程&#xff0c;每个Java程序员都需要了解的Kotlin&#xff0c;掌握kotlin可以开发Web前端、Web后…

主干网络篇 | YOLOv8更换主干网络之GhostNet

前言:Hello大家好,我是小哥谈。GhostNet是2019年由华为诺亚方舟实验室发布的轻量级网络,速度和MobileNetV3相似,但是识别的准确率比MobileNetV3高,在ImageNet ILSVRC2012分类数据集的达到了75.7%的top-1精度。该论文提除了Ghost模块,通过廉价操作生成更多的特征图。基于一…

是德科技keysight DSOX3024T示波器

181/2461/8938产品概述&#xff1a; DSOX3024T 示波器 要特性与技术指标 使用电容触摸屏进行简洁的触控操作&#xff1a; •提高调试效率 •触控设计可以简化文档记录 •使用起来就像您喜欢的智能手机或平板电脑一样简单 使用 MegaZoom IV 技术揭示偶发异常&#xff1a; •超快…

思通舆情 是一款开源免费的舆情系统 介绍

思通舆情 是一款开源免费的舆情系统。 支持本地化部署&#xff0c;支持在线体验。 支持对海量舆情数据分析和挖掘。 无论你是使用者还是共同完善的开发者&#xff0c;欢迎 pull request 或者 留言对我们提出建议。 您的支持和参与就是我们坚持开源的动力&#xff01;请 sta…

申请双软认证需要哪些材料?软件功能测试报告怎么获取?

“双软认证”是指软件产品评估和软件企业评估&#xff0c;其中需要软件测试报告。 企业申请双软认证除了获得软件企业和软件产品的认证资质&#xff0c;同时也是对企业知识产权的一种保护方式&#xff0c;更可以让企业享受国家提供给软件行业的税收优惠政策。 那么&#xff0c;…

6-191 拓扑排序

一项工程由一组子任务构成,子任务之间有的可以并行执行,有的必须在完成了其他子任务后才能执行。例如,下图表示了一项工程若干子任务之间的先后关系。 编写函数输出所有子任务的拓扑序列。 函数接口定义: Status Push_SeqStack(SeqStack &s, ElemType x)//入栈,x入到…