sparksql json 合并json数据
java
public class Demo {
private static SparkConf conf = new SparkConf().setAppName("demo").setMaster("local");
private static JavaSparkContext jsc = new JavaSparkContext(conf);
private static SparkSession session = new SparkSession(jsc.sc());
public static void main(String[] args) {
// 加载students.json name,score
Dataset<Row> score = session.read().json("./src/main/java/cn/tele/spark_sql/json/students.json");
score.createOrReplaceTempView("scoreView");
// name,score
JavaRDD<Row> scoreRDD = session.sql("select * from scoreView where score > 80").javaRDD();
// 创建信息json name,age
JavaRDD<String> infoRDD = jsc.parallelize(Arrays.asList("{\"name\":\"Leo\",\"age\":18}",
"{\"name\":\"Marry\",\"age\":19}", "{\"name\":\"Jack\",\"age\":20}"));
Dataset<Row> info = session.read().json(infoRDD);
info.createOrReplaceTempView("infoView");
// 拼接sql
List<Row> scoreList = scoreRDD.collect();
String sql = "select * from infoView where name in (";
for (int i = 0; i < scoreList.size(); i++) {
sql += "'" + scoreList.get(i).getAs("name") + "'";
if (i < scoreList.size() - 1) {
sql += ",";
}
}
sql += ")";
// 查询 分数>80的学生的name,age
// 转换
JavaPairRDD<String, Integer> tempRDD = session.sql(sql).javaRDD()
.mapToPair(new PairFunction<Row, String, Integer>() {
private static final long serialVersionUID = 1L;
@Override
public Tuple2<String, Integer> call(Row t) throws Exception {
return new Tuple2<String, Integer>(t.getAs("name"), Integer.valueOf(t.getAs("age").toString()));
}
});
JavaPairRDD<String, Integer> scoreRDD2 = scoreRDD.mapToPair(new PairFunction<Row, String, Integer>() {
private static final long serialVersionUID = 1L;
@Override
public Tuple2<String, Integer> call(Row t) throws Exception {
return new Tuple2<String, Integer>(t.getAs("name"), Integer.valueOf(t.getAs("score").toString()));
}
});
// join
JavaPairRDD<String, Tuple2<Integer, Integer>> resultRDD = tempRDD.join(scoreRDD2);
// 遍历
resultRDD.foreach(new VoidFunction<Tuple2<String, Tuple2<Integer, Integer>>>() {
private static final long serialVersionUID = 1L;
@Override
public void call(Tuple2<String, Tuple2<Integer, Integer>> t) throws Exception {
System.out.println("name:" + t._1 + "," + "age:" + t._2._1 + ",score:" + t._2._2);
}
});
// 保存为json格式
StructType schema = DataTypes
.createStructType(Arrays.asList(DataTypes.createStructField("name", DataTypes.StringType, false),
DataTypes.createStructField("age", DataTypes.IntegerType, false),
DataTypes.createStructField("score", DataTypes.IntegerType, false)));
JavaRDD<Row> rowRDD = resultRDD.map(new Function<Tuple2<String, Tuple2<Integer, Integer>>, Row>() {
private static final long serialVersionUID = 1L;
@Override
public Row call(Tuple2<String, Tuple2<Integer, Integer>> v1) throws Exception {
return RowFactory.create(v1._1, Integer.valueOf(v1._2._1), Integer.valueOf(v1._2._2));
}
});
Dataset<Row> resultDS = session.createDataFrame(rowRDD, schema);
resultDS.write().format("json").mode(SaveMode.Append).save("./src/main/java/cn/tele/spark_sql/json/result");
session.stop();
jsc.close();
}
}
scala
object Demo {
def main(args: Array[String]): Unit = {
val conf = new SparkConf().setAppName("demo").setMaster("local")
val sc = new SparkContext(conf)
val sqlContext = new SQLContext(sc)
//加载score 信息
val scoreDF = sqlContext.read.json("./src/main/scala/cn/tele/spark_sql/json/students.json")
scoreDF.createOrReplaceTempView("scoreView")
val arr = sqlContext.sql("select * from scoreView where score > 80").rdd.collect()
//创建 学生信息
val infoRDD = sc.parallelize(Array(
"{\"name\":\"Leo\",\"age\":20}",
"{\"name\":\"Marry\",\"age\":30}",
"{\"name\":\"Jack\",\"age\":21}"), 2)
val infoDS = sqlContext.read.json(infoRDD)
infoDS.createOrReplaceTempView("infoView")
var sql = "select * from infoView where name in ("
//拼接sql
for (i <- 0 to arr.length - 1) {
sql += "'" + arr(i).getAs[String]("name") + "'"
if (i < arr.length - 1) {
sql += ","
}
}
sql += ")"
val tempRDD = sqlContext.sql(sql).rdd.map(row => {
(row.getAs[String]("name"), row.getAs[Long]("age").toInt)
})
val tempRDD2 = scoreDF.rdd.map(row => {
(row.getAs[String]("name"), row.getAs[Long]("score").toInt)
})
//join
val resultRDD = tempRDD.join(tempRDD2)
//遍历
resultRDD.foreach(t => {
println("name:" + t._1 + "age:" + t._2._1 + "score:" + t._2._2)
})
val rowRDD = resultRDD.map(t => Row(t._1, t._2._1, t._2._2))
//保存为json文件
val schema = DataTypes.createStructType(Array(
StructField("name", DataTypes.StringType, false),
StructField("age", DataTypes.IntegerType, false),
StructField("score", DataTypes.IntegerType, false)))
val df = sqlContext.createDataFrame(rowRDD, schema)
df.write.format("json").mode(SaveMode.Append).save("./src/main/scala/cn/tele/spark_sql/json/result")
}
}
sparksql json 合并json数据的更多相关文章
- ASP.NET API(MVC) 对APP接口(Json格式)接收数据与返回数据的统一管理
话不多说,直接进入主题. 需求:基于Http请求接收Json格式数据,返回Json格式的数据. 整理:对接收的数据与返回数据进行统一的封装整理,方便处理接收与返回数据,并对数据进行验证,通过C#的特性 ...
- MVC学习系列6--使用Ajax加载分部视图和Json格式的数据
Ajax的应用在平时的工作中,很是常见,这篇文章,完全是为了,巩固复习. 我们先看看不使用json格式返回分部视图: 先说需求吧: 我有两个实体,一个是出版商[Publisher],一个是书[Book ...
- JSONObject.fromObject(map)(JSON与JAVA数据的转换)
JSON与JAVA数据的转换(JSON 即 JavaScript Object Natation,它是一种轻量级的数据交换格式,非常适合于服务器与 JavaScript 的交互.) 上一篇文章中有这么 ...
- JMeter学习(三十五)使用jmeter来发送json/gzip格式数据
一.使用jmeter来发送gzip数据 有时候我们需要模拟在客户端将数据压缩后, 发送(post)到服务器端. 通常这种情况,会发生在移动终端上. 这样做的好处, 是可以节省流量. 当然, 服务器返 ...
- asp.net MVC控制器中返回JSON格式的数据时提示下载
Asp.net mvc在接收的是JSON格式的数据,但是奇怪的是在IE中提示下载文件,其他浏览器中一切正常,下载后,里面的内容就是在控制器中返回的数据.代码如下: 视图中js代码: $("# ...
- php和js如何通过json互相传递数据
当我们在结合php和javascript实现某些功能时,经常会用到json.json是js的一种数据格式,可以直接被js解析.而php无法直接读取json数据,但是php提供了json_decode函 ...
- SQLyog-直接导出JSON格式的数据
前言:以前做过的一个项目,有这样的一个需求使用搜索引擎来查询对应的区域信息,不过区域信息要先导出来,并且数据格式是JSON格式的,在程序中能实现这个需求,不过下面的这种方法更加的简单,通过 ...
- php生成json或者xml数据
, ,'数据返回成功',$arr);echo $xml;?>
- 转载 ----HTML5 ---js实现json方式提交数据到服务端
json提交给服务器我们在提交之前需要通过js的相关函数来把数据转换成json格式的数据再进行post或get了,下面来看看. 大概需求就是前端要把数据组装成json,传给后端.首先,在客户端,通 ...
随机推荐
- 洛谷 P2025 脑力大人之监听电话
P2025 脑力大人之监听电话 题目背景 画外音: (声明:不要管前面那个,纯属意外,现已经重新编题,绝对原创) 上次海选,我们选出了参赛者中的20%参加本次比赛,现在我们将进行第二轮的筛选,这次的比 ...
- NYOJ 552 小数阶乘
小数阶乘 时间限制:1000 ms | 内存限制:65535 KB 难度:1 描写叙述 编写一个程序,求一个数m的阶乘. 输入 有多组測试数据,以EOF结束. 每组測试数据有1个整数m. 输出 每 ...
- oracle-function 练习
/* *scm_iss.test_imti_fun2 *带有输入參数的Function */ CREATE OR REPLACE FUNCTION TEST_IMTI_FUN2(P_NO IN NUM ...
- 无状态会话bean(1)---定义
无状态会话bean用于完毕在单个方法的生命周期内的操作.无状态bean能够实现很多业务操作,可是每一个方法都不能假定不论什么其它的方法会在它之前调用.后半句的意思是如今的你可能不是刚才的你.明天的你可 ...
- css中hack是什么
css中hack是什么 一.总结 1.CSS hack:由于不同厂商的浏览器,比如Internet Explorer,Safari,Mozilla Firefox,Chrome等,或者是同一厂商的浏览 ...
- amazeui学习笔记--css(基本样式4)--打印样式Print
amazeui学习笔记--css(基本样式3)--打印样式Print 一.总结 1.打印显示url方法: 利用 CSS3 content 属性,将 <a> 和 <abbr> 的 ...
- vue给对象新添加属性,一定要使用Vue.set( target, key, value )这个API来添加
this.tagList = [{ id:1, tagName:'90后' }, { id:2, tagName:'土豪' }, { id:3, tagName:'美女' }, { id:4, tag ...
- 算法 Tricks(三)—— 数组(序列)任意区间最小(大)值
序列(数组)的区间通过左右端点确定,这样首先设置一个最值变量用来记录最值,从左端点一步步移动到右端点,自然移动的过程中也可以计算整个区间的和,也即一次线性遍历下来,可同时获得多个有用信息. // 区间 ...
- swift开发网络篇—利用NSURLConnection GET请求和POST请求
一.GET请求和POST请求简单说明 @IBOutlet weakvar userName:UITextField! @IBOutletweakvar userPwd:UITextField! @IB ...
- tensorflow:图(Graph)的核心数据结构与通用函数(Utility function)
Tensorflow一些常用基本概念与函数(2) 1. 图(Graph)的核心数据结构 tf.Graph.__init__:建立一个空图: tf.Graph.as_default():一个将某图设置为 ...