使用Java编写Spark Streaming来做大数据处理(一)

写在前面:一般来说spark都是由Scala来实现,但Java一手遮天,非要以一己之力实现(不是)

一、使用JAVA编写有哪几部组成?

1.获取数据

//往往文件都是根据配置文件修改的时间,动态获取对应的文件来处理
 String filePath = "/租户目录/指标/指标分类/指标分类子分支" + startTime.substring(0, 6) + ".csv";
 //通过调用JavaSparkContext的获取文本的方法获取数据
 jsc.textFile(指标路径)

一般来说,想要使用JavaSparkContext,就要先定义一个JavaSparkContext的实例化对象

JavaSparkContext jsc = SparkConfig.Instance("自定义的名字");

2.处理数据

(1)获取数据时一般会根据分隔符(比如逗号)将元素划分命名,如下:
使用mapToPair方法操作数据,先将数据按照逗号分割成两部分,给到二元组Tuple2

jsc.textFile(filePath).mapToPair(new PairFunction<String, String, String>() {
                        @Override
                        public Tuple2<String, String> call(String t) throws Exception {
                            String[] split = t.split(",", -1);
                            return new Tuple2<>(split[0],split[1]);
                        }
                    })

(2)具体实际使用中,我们将结果返回一个JavaPairRDD<String, String>类型的自定义数据变量,并且做一个持久化操作

JavaPairRDD<String, String> 自定义数据名称= jsc.textFile(filePath).mapToPair(new PairFunction<String, String, String>() {
                        @Override
                        public Tuple2<String, String> call(String t) throws Exception {
                            String[] split = t.split(",", -1);
                            return new Tuple2<>(split[0],split[1]);
                        }
                    }).persist(StorageLevel.MEMORY_AND_DISK());

以此类推,可以定义好几个这样的JavaPairRDD<String,String>来暂时存储数据,有了这些数据,就可以进行Join等操作
除了直接使用,还可以把获取字段定义成一种方法,例如:

public static JavaPairRDD<String, String> get字段1字段2(JavaSparkContext jsc, String 字段1字段2) {
    JavaPairRDD<String, String> imsiAttr = jsc.textFile(filePath).mapToPair(new PairFunction<String, String, String>() {
        @Override
        public Tuple2<String, String> call(String s) throws Exception {
            String 字段1= s.split(",", -1)[0];
            String 字段2= s.split(",", -1)[1];
            return new Tuple2<>(字段1, 字段2);
        }
    });
    return 字段1字段2;
}

这样使用的时候就可以直接调用 get字段1字段2方法获取 字段1字段2

JavaPairRDD<String, String> 字段1字段2= get1_2(jsc, filePath);

注:在命名和使用中,往往会将一些字段的csv文件路径存为公参,比如
在公参文件中写

public static final String 字段1字段2= 租户目录 + "配置目录/字段1_字段2.csv";

然后再获取字段1字段2所对应的文件路径

String imsiattr = GetFilePathUtils.字段1字段2;

这样一来,实际使用中的代码就是:

String 字段1字段2= GetFilePathUtils.字段1字段2;
JavaPairRDD<String, String> 字段1字段2= get1_2(jsc, 字段1字段2).persist(StorageLevel.MEMORY_AND_DISK());

二、操作数据常用的方法有哪些?

一般为了提高代码的复用性,会将对数据的常用操作写成一个函数方法来调用,其中包含了很多的函数,具体常用的如下:
groupByKey

leftOuterJoin

mapToPair

flatMapToPair

reduceByKey

map

filter
通过合理的使用这些函数,实现分步骤处理数据,逐步筛选最终得到想要的数据结果的目的

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值