spark 统计每天新增用户数

问题描述:

原始数据

2017-01-01 a
2017-01-01 b
2017-01-01 c
2017-01-02 a
2017-01-02 b
2017-01-02 d
2017-01-03 b
2017-01-03 e
2017-01-03 f

根据数据可以看出我们要求的结果为: 2017-01-01 新增三个用户(a,b,c) 2017-01-02 新增一个用户(d) 2017-01-03 新增两个用户(e,f)求:统计列一中每个日期出现的次数,即为对应日期新增用户数。

package homeworkRDD;

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 java.text.SimpleDateFormat;
import java.util.Date;
import scala.Tuple2;

public class newuser {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		 SparkConf sparkConf = new SparkConf().setAppName("PeopleInfoCalculator").setMaster("local");
		    JavaSparkContext sc = new JavaSparkContext(sparkConf);
		    JavaRDD<String> dataFile = sc.textFile
		    		("file:///home/gyq/下载/spark-2.3.2-bin-hadoop2.7/data/newuser.txt");
		    JavaRDD<String> rdd_1=dataFile.map(f->{
		    	 Date format2 = null;
		    	 format2 = new SimpleDateFormat("yyyy-MM-dd").parse(f.split(" ")[0]);
		    	return new SimpleDateFormat("yyyyMMdd").format(format2)+" "+f. split(" ")[1];
		    });
		   
		    JavaPairRDD<String,Long> rdd2=rdd_1.mapToPair(f->{
		    	return new Tuple2<String,Long>(f.split(" ")[1],new Long(f.split(" ")[0]));
		    });
		    
		    JavaPairRDD<String,Long> rdd3=rdd2.reduceByKey((x,y)->{
		    	return x<y?x:y;
		    });
		    JavaPairRDD<Long,String> rdd4=rdd3.mapToPair(f->{
		    	return new Tuple2<>(f._2,f._1);
		    });
		    JavaPairRDD<Long,Integer> rdd5=rdd4.mapToPair(f->{
		    	return new Tuple2<Long,Integer>(f._1,1);
		    });
		    JavaPairRDD<Long,Integer> rdd6=rdd5.reduceByKey((x,y)->x+y);
		    JavaPairRDD<String,Integer> rdd7=rdd6.mapToPair(f->{
		    	return new Tuple2<String,Integer>(String.valueOf(f._1),f._2);
		    });
		    JavaPairRDD<String,Integer> rdd8=rdd7.mapToPair(f->{
		    	 Date format1 = null;
		            format1 = new SimpleDateFormat("yyyyMMdd").parse(f._1);
		            String longDate = new SimpleDateFormat("yyyy-MM-dd").format(format1);
		    	return new Tuple2<>(longDate,f._2);
		    });
		    rdd8.foreach(f->System.out.println(f._1()+"新增用户为: "+f._2));
//		    JavaPairRDD<String, Iterable<String>> rdd2=rdd1.groupByKey();
//		    rdd2.foreach(f->System.out.println(f));
	}
	

}

结果如下:

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西柚与蓝莓

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值