Spark 编程模型(中)
2024-10-20 07:59:24
先在IDEA新建一个maven项目
我这里用的是jdk1.8,选择相应的骨架
这里选择本地在window下安装的maven
新的项目创建成功
我的开始pom.xml文件配置
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.</modelVersion>
<groupId>com.gong.spark</groupId>
<artifactId>learning-spark</artifactId>
<version>1.0-SNAPSHOT</version>
<inceptionYear></inceptionYear>
<properties>
<scala.version>2.10.</scala.version>
<spark.version>1.6.</spark.version>
</properties> <repositories>
<repository>
<id>scala-tools.org</id>
<name>Scala-Tools Maven2 Repository</name>
<url>http://scala-tools.org/repo-releases</url>
</repository>
</repositories> <pluginRepositories>
<pluginRepository>
<id>scala-tools.org</id>
<name>Scala-Tools Maven2 Repository</name>
<url>http://scala-tools.org/repo-releases</url>
</pluginRepository>
</pluginRepositories> <dependencies>
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-library</artifactId>
<version>${scala.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.specs</groupId>
<artifactId>specs</artifactId>
<version>1.2.</version>
<scope>test</scope>
</dependency>
<!--spark-->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.</artifactId>
<version>${spark.version}</version>
<scope>provided</scope>
</dependency>
</dependencies> <build>
<!--
<sourceDirectory>src/main/scala</sourceDirectory>
<testSourceDirectory>src/test/scala</testSourceDirectory>
-->
<plugins>
<plugin>
<groupId>org.scala-tools</groupId>
<artifactId>maven-scala-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
<configuration>
<scalaVersion>${scala.version}</scalaVersion>
<args>
<arg>-target:jvm-1.5</arg>
</args>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-eclipse-plugin</artifactId>
<configuration>
<downloadSources>true</downloadSources>
<buildcommands>
<buildcommand>ch.epfl.lamp.sdt.core.scalabuilder</buildcommand>
</buildcommands>
<additionalProjectnatures>
<projectnature>ch.epfl.lamp.sdt.core.scalanature</projectnature>
</additionalProjectnatures>
<classpathContainers>
<classpathContainer>org.eclipse.jdt.launching.JRE_CONTAINER</classpathContainer>
<classpathContainer>ch.epfl.lamp.sdt.launching.SCALA_CONTAINER</classpathContainer>
</classpathContainers>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.</version>
<executions>
<!-- Run shade goal on package phase -->
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<!-- add Main-Class to manifest file -->
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<!--<mainClass>com.dajiang.MyDriver</mainClass>-->
</transformer>
</transformers>
<createDependencyReducedPom>false</createDependencyReducedPom>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<reporting>
<plugins>
<plugin>
<groupId>org.scala-tools</groupId>
<artifactId>maven-scala-plugin</artifactId>
<configuration>
<scalaVersion>${scala.version}</scalaVersion>
</configuration>
</plugin>
</plugins>
</reporting>
</project>
先在终端下试下打包
可以看到失败了!!!
把这几个生成默认的东西删除掉
再次测试
成功了
把他clean一下
进入自己在虚拟机安装的centos里面的spark
先测试一下spark环境有没有问题
OK运行成,环境没问题!
1.创建RDD
方式一:从集合创建RDD
回到idea,在main路径下新建java目录,并且对其以下操作:
在test路径下新建java目录,对其以下操作:
建包
在当前包下起个名字,其实也就是在这个包的路径下再建下一级目录
因为我们现在要写的是java程序,所以新建一个java类
写个简单的程序测下运行一下
OK没问题,可以运行!
把这里的这个插件由原来的1.5改成1.8,因为刚刚跑的时候有警告
在这里新建一个包,具体怎么操作这里就不重复了
插入之前写好的MyJavaWordCount.java的代码
MyJavaWordCount.java参考代码
package com.gong.spark.chap2_3; import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaPairRDD;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.api.java.function.FlatMapFunction;
import org.apache.spark.api.java.function.Function2;
import org.apache.spark.api.java.function.PairFunction;
import scala.Tuple2; import java.util.Arrays; public class MyJavaWordCount {
public static void main(String[] args){
//参数检查
if(args.length<) {
System.err.println("Usage:MyJavaCount <input> <output>");
System.exit();
} //获取参数
String input=args[];
String output=args[]; //创建java版本的SparkContext
SparkConf conf=new SparkConf().setAppName("MyJavaWordCount");
JavaSparkContext sc = new JavaSparkContext(conf); //读取数据
JavaRDD<String> inputRdd=sc.textFile(input); //进行相关计算
JavaRDD<String> words=inputRdd.flatMap(new FlatMapFunction<String, String>() {
public Iterable<String> call(String line) throws Exception {
return Arrays.asList(line.split(" "));
}
}); JavaPairRDD<String,Integer> result = words.mapToPair(new PairFunction<String, String, Integer>() {
public Tuple2<String,Integer> call(String word) throws Exception{
return new Tuple2(word,);
}
}).reduceByKey(new Function2<Integer, Integer, Integer>() {
public Integer call(Integer x, Integer y) throws Exception {
return x+y;
}
}); //保存结果
result.saveAsTextFile(output); //关闭sc
sc.stop();
}
}
把之前写好的scala版本的WordCount程序放进来
参考代码:
package com.gong.spark import org.apache.spark.{SparkConf, SparkContext} object MyWordCount {
def main(args: Array[String]):Unit={
//参数检查
if(args.length<){
System.err.println("Usage:MyWordCount <input> <output>")
System.exit()
} //获取参数
val input=args()
val output=args() //创建SparkContext
val conf=new SparkConf().setAppName("myWordCount")
val sc=new SparkContext(conf)
//读取数据
val lines=sc.textFile(input) //进行相关计算
val resultRdd=lines.flatMap(_.split(" ")).map((_,)).reduceByKey(_+_) //保存结果
resultRdd.saveAsTextFile(output)
sc.stop()
}
}
在终端mvn package
可以看到失败了,看来还是要把这里还回1.5版本的,不能乱改
再次在终端mvn package,可以看到成功了!
方式二;读取外部存储创建RDD
transformation操作
惰性求值
转换操作
基本转换操作1
基本转换操作2
控制操作
action操作
最新文章
- 前端 JS POST提交
- ConvertHelper类
- ASP.NET中的Image和ImageButton控件
- 当您尝试从 64 位 SQL Server 客户端上运行分布式的查询到链接的 32 位 SQL Server 时,您可能会收到一条错误消息
- MyEclipse+Mysql (一)
- DOM(九)使用DOM设置文本框
- C++学习之引用
- c++,模板函数的定义和使用【初探】
- python发送各类邮件的主要方法
- $.each()方法详解
- Android之LinkedHashMap实现LRU
- 数据的ID名生成新的引用索引树
- python 爬虫之爬取大街网(思路)
- (haut oj 1261 ) 地狱飞龙 利用不定积分求值
- 【LeetCode每天一题】Two Sum(两数之和)
- Linux环境 vi/vim ESC无法退出原因
- 使用v-for指令渲染列表
- oracle 如何创建只有查询权限的用户
- <;转载>; MySQL 性能优化的最佳20多条经验分享 http://www.jb51.net/article/24392.htm
- 【Python】获取服务器时间