离线轻量级大数据平台Spark之JavaRDD关联join操作
来源:互联网 发布:小榕sql注入工具 编辑:程序博客网 时间:2024/05/16 05:07
对两个RDD进行关联操作,如:
1)文件post_data.txt包含:post_id\title\content
2)文件train.txt包含:dev_id\post_id\praise\time
通过post_id关联,提取post_id\content\praise字段,文件字段用不定长多个空格分割;
参考代码如下:
package scs.contest;import java.util.List;import java.util.Properties;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.Optional;import org.apache.spark.api.java.function.PairFunction;import scala.Tuple2;public class pageview {public static String path="/home/spark/data";public static void main(String[] args) { //第一步:设置环境字符集,避免中文乱码 Properties pps=System.getProperties(); pps.setProperty("file.encoding","UTF-8"); //第二步:txt数据导入并分割成到训练集和预测集 SparkConf sparkConf = new SparkConf().setAppName("pageview"); JavaSparkContext jsc = new JavaSparkContext(sparkConf); JavaRDD<String> postdataLines =jsc.textFile(path+"/post_data.txt");//id\title\content JavaRDD<String> trainLines =jsc.textFile(path+"/train.txt");//dev_id\post_id\praise\time JavaPairRDD<String,String> pdLines=postdataLines.mapToPair(new PairFunction<String,String,String>(){ public Tuple2<String, String> call(String t) throws Exception { String[] st=t.split("\\s+");//多个空格情况的分割 String content=""; for(int i=1;i<st.length;i++){ content+=st[i]; } return new Tuple2(st[0],content);//title+content都取,title一般为空的情况下 } }); JavaPairRDD<String,String> ptLines=trainLines.mapToPair(new PairFunction<String,String,String>(){ public Tuple2<String, String> call(String t) throws Exception { String[] st=t.split("\\s+"); return new Tuple2(st[1], st[2]); } }); //合并两个JavaPairRDD,得到训练集和预测集 JavaPairRDD<String, Tuple2<String, String>> tLines=pdLines.join(ptLines);//训练街 Tuple2<String, Tuple2<String, String>> tpfirst=tLines.first(); System.out.println(tpfirst._1+"|"+tpfirst._2()._1+"|"+tpfirst._2()._2); //预测集,Optional<String>=Optional.empty的记录数 JavaPairRDD<String, Tuple2<String, Optional<String>>> pLines=pdLines.leftOuterJoin(ptLines); Tuple2<String, Tuple2<String, String>> tpfirst1=tLines.first(); System.out.println(tpfirst1._1+"|"+tpfirst1._2()._1+"|"+tpfirst1._2()._2); }}
执行结果:
507298|无聊的一天又开始了…|1547732|人生不可能总一帆风顺,总会有一些挫折的。|Optional.empty
参考官网的JavaPariRDD的join操作。
0 0
- 离线轻量级大数据平台Spark之JavaRDD关联join操作
- 离线轻量级大数据平台Spark之单机部署及Java开发
- 离线轻量级大数据平台Spark之MLib机器学习库概念学习
- 离线轻量级大数据平台Spark之MLib机器学习库聚类算法KMeans实例
- 离线轻量级大数据平台Spark之MLib机器学习库线性回归实例
- 离线轻量级大数据平台Spark之MLib机器学习协同过滤ALS实例
- 离线轻量级大数据平台Spark之MLib机器学习库TF-IDF实例
- 离线轻量级大数据平台Spark之MLib机器学习库朴素贝叶斯实例
- 离线轻量级大数据平台Spark之MLib机器学习库SVM实例
- 离线轻量级大数据平台Spark之MLib机器学习库Word2Vec实例
- 离线轻量级大数据平台Spark之读取CSV文件实例
- 离线轻量级大数据平台Spark之中文字符显示问题的解决
- Spark大数据平台
- 朝花夕拾之--大数据平台CDH集群离线搭建
- 大数据平台之CDH集群离线搭建
- spark + GlusterFS 大数据轻量级框架
- Spark基本操作SparkSession,Dataset<Row>,JavaRDD<Row>
- spark离线大数据运算程序编译
- eclipse代码风格规范
- VC多线程编程之线程创建与示例
- Nginx 完整配置说明
- 码云source tree 提交超过100m 为什么大文件推不上去
- Effective C++读书笔记之构造/析构/赋值运算
- 离线轻量级大数据平台Spark之JavaRDD关联join操作
- eclipse高DPI缩放工具
- 蓝桥杯,关于数独的递归思路解决问题
- vsftpd配置文件详解
- 代码技巧1监听器从子线程切换主线程
- es 查询 问题 模糊查询
- 学习感悟2
- jmap查看内存使用情况与生成heapdump--转
- ubuntu记录