JavaSpark编写程序在linux上运行

Spark编写程序在linux上运行由于没有指定文件地址,和输出文件地址所以在linux中需要参数

 在spark/bin/目录下  ./spark-submit --master spark://linux01:7077 --executor-memory 1g --total-executor-cores 8

--class com.51doit.spark.LambdaWordCount    -jar  hdfs://linux:9000/spark/wordcount.txt   hdfs://linux:9000/sparkout-01

--executor-memory 1g 指定worker可用的内存大小

--total-executor-cores 8 指定worker可用的逻辑核数

--calss  全类名

-jar打好jar包,上传到linux中ctrl+p 打开sftp

  其中spark已经有的jar包就不需要打了,在pom.xml文件中 

<scope>provided</scope>
<!-- provided编译时运行jar包,打jar包时不会使用 -->

但是在本地编写的时候要打开,否则找不到jar包

 

 System.setProperty("HADOOP_USER_NAME","root"); 给权限,否则会报错.

public class LambdaWordCount {
    public static void main(String[] args) {
        //获取javaSpark的conf传入Jsc
SparkConf conf = new SparkConf().setAppName("LambdaWordCount2").setMaster("local[*]");

        //将conf传入jsc中
        JavaSparkContext jsc = new JavaSparkContext(conf);
        //获取RDD大集合
        JavaRDD<String> javaRDD = jsc.textFile(args[0]);
        //使用flatMap方法拆分压平--因为java中flatMap方法返回的是iterator迭代器,所以需要将数组转成集合,在.迭代器,让返回值也是迭代器
        JavaRDD<String> words = javaRDD.flatMap(lines -> Arrays.asList(lines.split(" ")).iterator());
        //使用map方法聚合+1,形成元组,但java没有元组,所以需要调取Tuple2.apply方法转成元组形式,不能调map方法,这样就没有ReduceByKe了
        JavaPairRDD<String, Integer> wordAndOne = words.mapToPair(w -> Tuple2.apply(w, 1));
        //使用ReduceByKey,输入x+y逻辑,将相同key的values聚合
        JavaPairRDD<String, Integer> reduceWord = wordAndOne.reduceByKey((x, y) -> (x + y));
        //排序,java中排序只有SortByKey,所以需要调mapToPair方法将 key和values翻转,这样values在前,key在后
        JavaPairRDD<Integer, String> swapWords = reduceWord.mapToPair(Tuple2::swap);
        //按照调换的value进行排序,false是倒叙
        JavaPairRDD<Integer, String> sortByWord = swapWords.sortByKey(false);
        //使用mapToPair再次调换value和key
        JavaPairRDD<String, Integer> gogogo = sortByWord.mapToPair(Tuple2::swap);
        //Transformation 结束
        //Action算子,会触发任务执行
        //将数据保存到HDFS
        gogogo.saveAsTextFile(args[1]);
        jsc.stop();


    }
}
  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值