IDEA上Spark——Java、Scala的本地测试版与集群运行版

Java本地测试先放出代码中各类注释代码以及源码地址遇见的问题打包jar到集群测试Scala本地测试源码遇见的问题Scala打包到集群测试源码以及地址遇见的问题参考资源Java本地测试2017/11/131.先放出代码中各类注释(由于初次学习,为方便以后复习或查阅,注释较多。为避免代码太“冗余”故将部分注释分出来。) 注释i )、 每个Spark应用程序都由一个驱动
摘要由CSDN通过智能技术生成

Java本地测试

2017/11/13

1.先放出代码中各类注释

(由于初次学习,为方便以后复习或查阅,注释较多。为避免代码太“冗余”故将部分注释分出来。)
注释i )、

  • 每个Spark应用程序都由一个驱动器程序(驱动器节点产生的,驱动器节点通俗的讲,可以视为hadoop中的namenode)来发起集群上的各种并行操作,驱动器程序(shell中的驱动器程序是Spark shell)可执行应用程序中的main方法,驱动器通过一个SparkContext对象访问Spark——这个对象代表对集群的一个连接(shell启动时已经自动创建了一个SparkContext对象)。【参考:参考资源1中P12】
  • 在Spark中,SparkContext是Spark所有功能的一个入口,无论是用java、scala、还是python编写都必须要有一个SparkContext,它的主要作用,包括初始化Spark应用程序所需的一些核心组件、调度器(DAGScheduler、TaskScheduler),到Spark Master节点上进行注册,等等。
    但是在Spark中,编写不同类型的Spark应用程序,使用的SparkContext是不同的,如果使用scala,使用的就是原生的SparkContext对象
    但是如果使用Java,那么就是JavaSparkContext对象
    如果是开发Spark SQL程序,那么就是SQLContext、HiveContext
    如果是开发Spark Streaming程序,那么就是它独有的SparkContext
    以此类推【参考:北风网相关课程】

注释ii)、

RDD支持两种类型的操作,一种是转化(transformation)操作,一种是行动(action)操作。行动操作会对RDD计算出一个结果,并把结果返回到驱动器程序中,或者把结果存储到如HDFS这样的外部存储系统。但是要注意的是,RDD的行动操作是“懒惰”型的,它只会在你第一次真正使用它是进行相应计算操作(对于大数据环境,这是个很有必要的特点,也正因如此,我们不应该把RDD看做存放着特定数据的数据集,而应该看做是一个存放着计算步骤的指令列表),并且在默认情况下,即使是同一个行动操作,每一次调用,它都会重新计算(如果需要频繁用到某个操作产生的结果,可以将结果缓存,使用方法RDD.persist()——但是我认为对于数据量大的结果,这个方法还是不管用吧?)。【参考:参考资源1中P22、P27】
如果转换操作比较简单,则创建指定Function的匿名内部类;但是如果function比较复杂,则会单独创建一个类,作为实现这个function接口的类

注释iii )、

写一堆匿名内部类调用方法,感觉代码太“繁杂”,于是换用函数式编程的lambda替代,lambda实现的上方所注释的,就是对应的“繁杂”版。
TODO:lambda在“背后”具体是怎么转换代码的

2.代码以及源码地址:

https://github.com/AtTops/Practice-Item/tree/master/SparkScala/main/scala/per/wanghai

创建maven项目,最低依赖仅需Spark的core包
部分代码有普通java与lambda两种写法

package per.wanghai.spark.core;

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 org.apache.spark.api.java.function.VoidFunction;
import scala.Tuple2;

import java.util.Arrays;
import java.util.Iterator;

/**
 * @author 王海[https://github.com/AtTops]
 * @package per.wanghai.spark.core
 * @description Java 本地版Spark的单词计数程序
 * @Date 2017/11/13 19:55
 * @Version V1.0
 */
public class WordCountLocal {
   

    private static final String OUTPUTFILEPATH = "./dataout";

    public static 
  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值