用java编写spark程序,简单示例及运行

最近因为工作需要,研究了下spark,因为scala还不熟,所以先学习了java的spark程序写法,下面是我的简单测试程序的代码,大部分函数的用法已在注释里面注明。


我的环境:hadoop 2.2.0

                   spark-0.9.0

                   scala-2.10.3

                   jdk1.7



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


import java.util.Arrays;
import java.util.List;
import java.util.regex.Pattern;


public final class mysparktest {


    public static void main(String[] args) throws Exception {


       //context ,用于读文件 ,类似于scala的sc
       //格式为:
       // JavaSparkContext(master: String, appName: String, sparkHome: String, jars: Array[String], environment: Map[String, String])
        JavaSparkContext ctx = new JavaSparkContext("yarn-standalone", "JavaWordCount",
                System.getenv("SPARK_HOME"), JavaSparkContext.jarOfClass(mysparktest.class));


        //也可以使用ctx获取环境变量,例如下面的语句
        System.out.println("spark home:"+ctx.getSparkHome());






         //一次一行,String类型    ,还有hadoopfile,sequenceFile什么的  ,可以直接用sc.textFile("path")
        JavaRDD<String> lines = ctx.textFile(args[1], 1);  //java.lang.String path, int minSplits
        lines.cache();   //cache,暂时放在缓存中,一般用于哪些可能需要多次使用的RDD,据说这样会减少运行时间


        //collect方法,用于将RDD类型转化为java基本类型,如下
        List<String> line = lines.collect();
        for(String val:line)
                System.out.println(val);


       //下面这些也是RDD的常用函数
       // lines.collect();  List<String>
       // lines.union();     javaRDD<String>
       // lines.top(1);     List<String>
       // lines.count();      long
       // lines.countByValue();


        /**
         *   filter test
         *   定义一个返回bool类型的函数,spark运行filter的时候会过滤掉那些返回只为false的数据
         *   String s,中的变量s可以认为就是变量lines(lines可以理解为一系列的String类型数据)的每一条数据
         */
        JavaRDD<String> contaninsE = lines.filter(new Function<String, Boolean>() {
            &
  • 6
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值