spark-sql集合的“条件过滤”,“合并”,“动态类型映射DataFrame”,“存储”
List<String> basicList = new ArrayList<String>();
basicList.add("{\"name\": \"zzq\",\"age\": 15}");
basicList.add("{\"name\": \"zzq1\",\"age\": 25}");
basicList.add("{\"name\": \"zzq2\",\"age\": 35}"); List<String> scoreList = new ArrayList<String>();
scoreList.add("{\"name\": \"zzq\",\"sex\": \"男\",\"score\": 110}");
scoreList.add("{\"name\": \"zzq1\",\"sex\": \"女\",\"score\": 90}");
scoreList.add("{\"name\": \"zzq2\",\"sex\": \"男\",\"score\": 70}"); SparkConf sparkConf = new SparkConf()
.setAppName("StudentsScore")
.setMaster("local"); JavaSparkContext javaSparkContext = new JavaSparkContext(sparkConf);
SQLContext sqlContext = new SQLContext(javaSparkContext); JavaRDD<String> rdd_basicList = javaSparkContext.parallelize(basicList);
JavaRDD<String> rdd_scoreList = javaSparkContext.parallelize(scoreList); DataFrame df_scoreList = sqlContext.read().json(rdd_scoreList);
JavaRDD<Row> rdd_filter_score = df_scoreList.filter(df_scoreList.col("score").geq(90)).javaRDD(); //Pair默认返回一个Tuple2,如果更多属性值的话可以在第二个参数下使用TupleX,例子如下
JavaPairRDD<String, Tuple2<String, Long>> rdd_pair_score = rdd_filter_score.mapToPair(new PairFunction<Row, String, Tuple2<String, Long>>() {
@Override
public Tuple2<String, Tuple2<String, Long>> call(Row row) throws Exception {
return new Tuple2<String, Tuple2<String, Long>>(row.getString(0), new Tuple2<String, Long>(row.getString(2), row.getLong(1)));
}
}); DataFrame df_basicList = sqlContext.read().json(rdd_basicList);
df_basicList.registerTempTable("df_basicList_table");
StringBuilder sqlStrB = new StringBuilder();
sqlStrB.append("select name,age from df_basicList_table where name in ( ");
List<Tuple2<String, Tuple2<String, Long>>> local_rdd_pair_score = rdd_pair_score.collect();
Iterator<Tuple2<String, Tuple2<String, Long>>> itr = local_rdd_pair_score.iterator();
for (; itr.hasNext(); ) {
Tuple2<String, Tuple2<String, Long>> currItem = itr.next();
sqlStrB.append("\"");
sqlStrB.append(currItem._1());
sqlStrB.append("\"");
if (itr.hasNext())
sqlStrB.append(",");
}
sqlStrB.append(" ) "); DataFrame df_filter_basicList = sqlContext.sql(sqlStrB.toString());
JavaRDD<Row> rdd_filter_basic = df_filter_basicList.javaRDD();
JavaPairRDD<String, Long> rdd_pair_basic = rdd_filter_basic.mapToPair(new PairFunction<Row, String, Long>() {
@Override
public Tuple2<String, Long> call(Row row) throws Exception {
return new Tuple2<String, Long>(row.getString(0), row.getLong(1));
}
}); JavaPairRDD<String, Tuple2<Tuple2<String, Long>, Long>> all_studentsInfo = rdd_pair_score.join(rdd_pair_basic); //存储-------------------------------start----------------------------------
JavaRDD<Row> row_all_studentsInfo = all_studentsInfo.map(new Function<Tuple2<String, Tuple2<Tuple2<String, Long>, Long>>, Row>() {
@Override
public Row call(Tuple2<String, Tuple2<Tuple2<String, Long>, Long>> v1) throws Exception {
return RowFactory.create(v1._1(), v1._2()._1()._1(), v1._2()._1()._2(), v1._2()._2());
}
}); List<StructField> fieldList = new ArrayList<StructField>();
fieldList.add(DataTypes.createStructField("name", DataTypes.StringType, true));
fieldList.add(DataTypes.createStructField("sex", DataTypes.StringType, true));
fieldList.add(DataTypes.createStructField("score", DataTypes.LongType, true));
fieldList.add(DataTypes.createStructField("age", DataTypes.LongType, true));
StructType temp = DataTypes.createStructType(fieldList); DataFrame df_save = sqlContext.createDataFrame(row_all_studentsInfo, temp); df_save.write().save("hdfs://xxxx..........parquet");//将文件存储
//存储-------------------------------end---------------------------------- all_studentsInfo.foreach(new VoidFunction<Tuple2<String, Tuple2<Tuple2<String, Long>, Long>>>() {
@Override
public void call(Tuple2<String, Tuple2<Tuple2<String, Long>, Long>> stringTuple2Tuple2) throws Exception {
System.out.println(">>>>>>>>>>>>" + stringTuple2Tuple2._1() + " -- " + stringTuple2Tuple2._2()._1()._1() + " -- " + stringTuple2Tuple2._2()._1()._2() + " -- " + stringTuple2Tuple2._2()._2());
}
});
spark-sql集合的“条件过滤”,“合并”,“动态类型映射DataFrame”,“存储”的更多相关文章
- PL/SQL集合(一):记录类型(TYPE 类型名称 IS RECORD)
记录类型 利用记录类型可以实现复合数据类型的定义: 记录类型允许嵌套: 可以直接利用记录类型更新数据. 传统操作的问题 对于Oracle数据类型,主要使用的是VARCHAR2.NUMBER.DATE等 ...
- 大数据技术之_19_Spark学习_03_Spark SQL 应用解析 + Spark SQL 概述、解析 、数据源、实战 + 执行 Spark SQL 查询 + JDBC/ODBC 服务器
第1章 Spark SQL 概述1.1 什么是 Spark SQL1.2 RDD vs DataFrames vs DataSet1.2.1 RDD1.2.2 DataFrame1.2.3 DataS ...
- Spark 官方文档(5)——Spark SQL,DataFrames和Datasets 指南
Spark版本:1.6.2 概览 Spark SQL用于处理结构化数据,与Spark RDD API不同,它提供更多关于数据结构信息和计算任务运行信息的接口,Spark SQL内部使用这些额外的信息完 ...
- 平易近人、兼容并蓄——Spark SQL 1.3.0概览
自2013年3月面世以来,Spark SQL已经成为除Spark Core以外最大的Spark组件.除了接过Shark的接力棒,继续为Spark用户提供高性能的SQL on Hadoop解决方案之外, ...
- 【转载】Spark SQL 1.3.0 DataFrame介绍、使用
http://www.aboutyun.com/forum.php?mod=viewthread&tid=12358&page=1 1.DataFrame是什么?2.如何创建DataF ...
- Apache Spark 2.2.0 中文文档 - Spark SQL, DataFrames and Datasets Guide | ApacheCN
Spark SQL, DataFrames and Datasets Guide Overview SQL Datasets and DataFrames 开始入门 起始点: SparkSession ...
- [转] Spark sql 内置配置(V2.2)
[From] https://blog.csdn.net/u010990043/article/details/82842995 最近整理了一下spark SQL内置配.加粗配置项是对sparkSQL ...
- Apache Spark 2.2.0 中文文档 - Spark SQL, DataFrames and Datasets
Spark SQL, DataFrames and Datasets Guide Overview SQL Datasets and DataFrames 开始入门 起始点: SparkSession ...
- Spark SQL 官方文档-中文翻译
Spark SQL 官方文档-中文翻译 Spark版本:Spark 1.5.2 转载请注明出处:http://www.cnblogs.com/BYRans/ 1 概述(Overview) 2 Data ...
随机推荐
- [转]Docker中的镜像
引言 这篇文章中我们主要来探讨下Docker镜像,它是用来启动容器的构建基石,本文的所用到的Dcoker版本是17.1,API版本是1.33,Go的版本是1.9.2,OS是基于Arch Linux的M ...
- [druid]大数据挑战——如何使用Druid实现数据聚合
-- 知道你为什么惧组件很多的一些开源软件? 因为缺乏阅读能力. 最近我接手了druid+kafka+elk一套等日志系统. 但是我对druid很陌生, 周旋了几天, 官网文档快速开始照着做了下. 看 ...
- [Memcached]分布式缓存系统Memcached在Asp.net下的应用
Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度.Memcached ...
- 图解JAVA参数传递
今天做项目,发现了一个问题,当String作为参数传递的时候,在函数内部改变值对外部的变量值无影响,如下代码: public static void main(String[] args) { Str ...
- 关于C/C++中求最大公约数和最小公倍数的算法
1.更相减损法 int gcd(int a,int b) { while(a!=b) { if(a>b) a-=b; else b-=a; } return a; } 2.辗转相除法--递归 i ...
- YARN 启动后失败退出——没有请求资源——Invalid resource request, no resources request
在ambari-server中修改了yarn的配置,重新启动服务,结果RM启动失败,错误也很奇怪,“不合理的资源请求,没有请求任何资源”!详细如下: -- ::, FATAL resourcemana ...
- swoole Tcp服务器
基础代码 <?php //创建Server对象,监听 127.0.0.1:9501端口 $serv = ); //监听连接进入事件 $serv->on('connect', functio ...
- Spring Security的几个重要词
1.SecurityContextHolder:是安全上下文容器,可以在此得知操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限…这些都被保存在SecurityContextHolder中. O ...
- saltstack通过jinja模板,将变量值增加到配置文件中?通过引用变量值修改配置文件?
需求描述: 在使用saltstack的时候,有的时候,需要根据不同的变量来增加配置,比如,bind,监听端口,这些都可以通过变量写入,并且在配置的时候引用,下面是一个例子,用来演示,如何使用jinja ...
- C++系统自己主动生成默认构造函数的情况
(1) 基类存在默认构造函数 class CBaseClass { public: CBaseClass() { m_i = 0; } private: int m_i; }; class CDriv ...