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数据的更多相关文章

  1. ASP.NET API(MVC) 对APP接口(Json格式)接收数据与返回数据的统一管理

    话不多说,直接进入主题. 需求:基于Http请求接收Json格式数据,返回Json格式的数据. 整理:对接收的数据与返回数据进行统一的封装整理,方便处理接收与返回数据,并对数据进行验证,通过C#的特性 ...

  2. MVC学习系列6--使用Ajax加载分部视图和Json格式的数据

    Ajax的应用在平时的工作中,很是常见,这篇文章,完全是为了,巩固复习. 我们先看看不使用json格式返回分部视图: 先说需求吧: 我有两个实体,一个是出版商[Publisher],一个是书[Book ...

  3. JSONObject.fromObject(map)(JSON与JAVA数据的转换)

    JSON与JAVA数据的转换(JSON 即 JavaScript Object Natation,它是一种轻量级的数据交换格式,非常适合于服务器与 JavaScript 的交互.) 上一篇文章中有这么 ...

  4. JMeter学习(三十五)使用jmeter来发送json/gzip格式数据

    一.使用jmeter来发送gzip数据 有时候我们需要模拟在客户端将数据压缩后, 发送(post)到服务器端. 通常这种情况,会发生在移动终端上. 这样做的好处, 是可以节省流量.  当然, 服务器返 ...

  5. asp.net MVC控制器中返回JSON格式的数据时提示下载

    Asp.net mvc在接收的是JSON格式的数据,但是奇怪的是在IE中提示下载文件,其他浏览器中一切正常,下载后,里面的内容就是在控制器中返回的数据.代码如下: 视图中js代码: $("# ...

  6. php和js如何通过json互相传递数据

    当我们在结合php和javascript实现某些功能时,经常会用到json.json是js的一种数据格式,可以直接被js解析.而php无法直接读取json数据,但是php提供了json_decode函 ...

  7. SQLyog-直接导出JSON格式的数据

          前言:以前做过的一个项目,有这样的一个需求使用搜索引擎来查询对应的区域信息,不过区域信息要先导出来,并且数据格式是JSON格式的,在程序中能实现这个需求,不过下面的这种方法更加的简单,通过 ...

  8. php生成json或者xml数据

    , ,'数据返回成功',$arr);echo $xml;?>

  9. 转载 ----HTML5 ---js实现json方式提交数据到服务端

    json提交给服务器我们在提交之前需要通过js的相关函数来把数据转换成json格式的数据再进行post或get了,下面来看看.   大概需求就是前端要把数据组装成json,传给后端.首先,在客户端,通 ...

随机推荐

  1. [React] Configure a React & Redux Application For Production Deployment and Deploy to Now

    In this lesson, we’ll make a few small changes to our scripts and add some environment variables tha ...

  2. 关于jsonp跨域的问题以及解决方法(跨域、同源与非同源)

    什么是跨域? 想要了解跨域,首先需要了解下浏览器的同源机制: JSONP和AJAX相同,都是客户端向服务器端发送请求:给服务器端传递数据 或者 从服务器端获取数据 的方式 JSONP属于非同源策略(跨 ...

  3. Vue里父子组间的通讯

    父组件代码 <template> <div> <child @child-say="listenToBoy" :mes=count></c ...

  4. 【MemSQL Start[c]UP 3.0 - Round 1 C】 Pie Rules

    [链接]h在这里写链接 [题意] 在这里写题意 [题解]     dp[i][0] 第i个位置,bob没有决策权     dp[i][1] 第i个位置,bob有决策权     dp[n][0] = 0 ...

  5. php 获取数组第一个key 第一个键值对 等等

    PHP 获取数组中的第一个元素或最后一个元素的值或者键值可以使用 PHP 自带的数组函数. PHP 获取数组中的第一个元素的值或者键值所使用的函数: current() - 返回数组中当前元素值(即: ...

  6. (转)nginx的root和alias指令的区别

    转自 http://www.cnblogs.com/tintin1926/archive/2012/07/11/2586813.html nginx配置下有两个指定目录的执行,root和alias   ...

  7. IOS基础:深入理解Objective-c中@class 和#import的区别

    在面向对象objective-C语言中,当一个类使用到另一个类时,并且在类的头文件中需要创建被引用的指针时,可以#import方式引入,通过@class引入: 这两种的方式的区别在于: 1.运用#im ...

  8. 图解UNIX的I/O模型

    版权声明:本文为博主原创文章,转载请注明出处: leehao.me https://blog.csdn.net/lihao21/article/details/51620374 一.简述 UNIX系统 ...

  9. Android 底部TabActivity(0)——开篇(界面分析|系列文章文件夹)

    当下主流的软件没有一个统一明白的风格,App框架什么样的都有,但个人钟情于页面底部Tab分签架构,移动设备的屏幕尽管越来越大,可是显示的内容还是有限,为了能展示很多其它的内容,方便简洁的操作习惯中Ta ...

  10. LoaderManager使用具体解释(一)---没有Loader之前的世界

    来源: http://www.androiddesignpatterns.com/2012/07/loaders-and-loadermanager-background.html 感谢作者Alex ...