java

  1. public class Demo {
  2. private static SparkConf conf = new SparkConf().setAppName("demo").setMaster("local");
  3. private static JavaSparkContext jsc = new JavaSparkContext(conf);
  4. private static SparkSession session = new SparkSession(jsc.sc());
  5.  
  6. public static void main(String[] args) {
  7.  
  8. // 加载students.json name,score
  9. Dataset<Row> score = session.read().json("./src/main/java/cn/tele/spark_sql/json/students.json");
  10.  
  11. score.createOrReplaceTempView("scoreView");
  12.  
  13. // name,score
  14. JavaRDD<Row> scoreRDD = session.sql("select * from scoreView where score > 80").javaRDD();
  15.  
  16. // 创建信息json name,age
  17. JavaRDD<String> infoRDD = jsc.parallelize(Arrays.asList("{\"name\":\"Leo\",\"age\":18}",
  18. "{\"name\":\"Marry\",\"age\":19}", "{\"name\":\"Jack\",\"age\":20}"));
  19.  
  20. Dataset<Row> info = session.read().json(infoRDD);
  21. info.createOrReplaceTempView("infoView");
  22.  
  23. // 拼接sql
  24. List<Row> scoreList = scoreRDD.collect();
  25.  
  26. String sql = "select * from infoView where name in (";
  27. for (int i = 0; i < scoreList.size(); i++) {
  28. sql += "'" + scoreList.get(i).getAs("name") + "'";
  29. if (i < scoreList.size() - 1) {
  30. sql += ",";
  31. }
  32. }
  33.  
  34. sql += ")";
  35.  
  36. // 查询 分数>80的学生的name,age
  37.  
  38. // 转换
  39. JavaPairRDD<String, Integer> tempRDD = session.sql(sql).javaRDD()
  40. .mapToPair(new PairFunction<Row, String, Integer>() {
  41.  
  42. private static final long serialVersionUID = 1L;
  43.  
  44. @Override
  45. public Tuple2<String, Integer> call(Row t) throws Exception {
  46. return new Tuple2<String, Integer>(t.getAs("name"), Integer.valueOf(t.getAs("age").toString()));
  47. }
  48. });
  49.  
  50. JavaPairRDD<String, Integer> scoreRDD2 = scoreRDD.mapToPair(new PairFunction<Row, String, Integer>() {
  51.  
  52. private static final long serialVersionUID = 1L;
  53.  
  54. @Override
  55. public Tuple2<String, Integer> call(Row t) throws Exception {
  56. return new Tuple2<String, Integer>(t.getAs("name"), Integer.valueOf(t.getAs("score").toString()));
  57. }
  58. });
  59.  
  60. // join
  61. JavaPairRDD<String, Tuple2<Integer, Integer>> resultRDD = tempRDD.join(scoreRDD2);
  62.  
  63. // 遍历
  64. resultRDD.foreach(new VoidFunction<Tuple2<String, Tuple2<Integer, Integer>>>() {
  65.  
  66. private static final long serialVersionUID = 1L;
  67.  
  68. @Override
  69. public void call(Tuple2<String, Tuple2<Integer, Integer>> t) throws Exception {
  70. System.out.println("name:" + t._1 + "," + "age:" + t._2._1 + ",score:" + t._2._2);
  71. }
  72. });
  73.  
  74. // 保存为json格式
  75. StructType schema = DataTypes
  76. .createStructType(Arrays.asList(DataTypes.createStructField("name", DataTypes.StringType, false),
  77. DataTypes.createStructField("age", DataTypes.IntegerType, false),
  78. DataTypes.createStructField("score", DataTypes.IntegerType, false)));
  79.  
  80. JavaRDD<Row> rowRDD = resultRDD.map(new Function<Tuple2<String, Tuple2<Integer, Integer>>, Row>() {
  81.  
  82. private static final long serialVersionUID = 1L;
  83.  
  84. @Override
  85. public Row call(Tuple2<String, Tuple2<Integer, Integer>> v1) throws Exception {
  86. return RowFactory.create(v1._1, Integer.valueOf(v1._2._1), Integer.valueOf(v1._2._2));
  87. }
  88. });
  89.  
  90. Dataset<Row> resultDS = session.createDataFrame(rowRDD, schema);
  91.  
  92. resultDS.write().format("json").mode(SaveMode.Append).save("./src/main/java/cn/tele/spark_sql/json/result");
  93.  
  94. session.stop();
  95. jsc.close();
  96. }
  97. }

scala

  1. object Demo {
  2. def main(args: Array[String]): Unit = {
  3. val conf = new SparkConf().setAppName("demo").setMaster("local")
  4. val sc = new SparkContext(conf)
  5. val sqlContext = new SQLContext(sc)
  6.  
  7. //加载score 信息
  8. val scoreDF = sqlContext.read.json("./src/main/scala/cn/tele/spark_sql/json/students.json")
  9.  
  10. scoreDF.createOrReplaceTempView("scoreView")
  11.  
  12. val arr = sqlContext.sql("select * from scoreView where score > 80").rdd.collect()
  13.  
  14. //创建 学生信息
  15. val infoRDD = sc.parallelize(Array(
  16. "{\"name\":\"Leo\",\"age\":20}",
  17. "{\"name\":\"Marry\",\"age\":30}",
  18. "{\"name\":\"Jack\",\"age\":21}"), 2)
  19.  
  20. val infoDS = sqlContext.read.json(infoRDD)
  21.  
  22. infoDS.createOrReplaceTempView("infoView")
  23.  
  24. var sql = "select * from infoView where name in ("
  25. //拼接sql
  26. for (i <- 0 to arr.length - 1) {
  27. sql += "'" + arr(i).getAs[String]("name") + "'"
  28. if (i < arr.length - 1) {
  29. sql += ","
  30. }
  31. }
  32.  
  33. sql += ")"
  34.  
  35. val tempRDD = sqlContext.sql(sql).rdd.map(row => {
  36. (row.getAs[String]("name"), row.getAs[Long]("age").toInt)
  37. })
  38.  
  39. val tempRDD2 = scoreDF.rdd.map(row => {
  40. (row.getAs[String]("name"), row.getAs[Long]("score").toInt)
  41. })
  42.  
  43. //join
  44. val resultRDD = tempRDD.join(tempRDD2)
  45.  
  46. //遍历
  47. resultRDD.foreach(t => {
  48. println("name:" + t._1 + "age:" + t._2._1 + "score:" + t._2._2)
  49. })
  50.  
  51. val rowRDD = resultRDD.map(t => Row(t._1, t._2._1, t._2._2))
  52.  
  53. //保存为json文件
  54. val schema = DataTypes.createStructType(Array(
  55. StructField("name", DataTypes.StringType, false),
  56. StructField("age", DataTypes.IntegerType, false),
  57. StructField("score", DataTypes.IntegerType, false)))
  58.  
  59. val df = sqlContext.createDataFrame(rowRDD, schema)
  60.  
  61. df.write.format("json").mode(SaveMode.Append).save("./src/main/scala/cn/tele/spark_sql/json/result")
  62. }
  63. }

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. WinXP局域网共享设置

    关闭局域网共享 1.不允许SAM帐户和共享的匿名枚举(系统默认是允许的). 组策略-计算机配置-Windows 设置-安全设置-本地安全策略-安全选项-网络访问:不允许SAM帐户和共享的匿名枚举. 设 ...

  2. input选中 和 select点击下拉选择获取选中选项的值

    1.input选中$('#checkBox').find('input').each(function(i){ if($(this).prop('checked')){//获取是否选中 并判断 $(t ...

  3. less相关知识点

    less是一门css预处理语言,文件后缀名为.less,能减少css文件编写的代码量 官网 http://lesscss.cn/#using-less 安装 使用npm install -g less ...

  4. 【剑指offer】对面和相等的正方体

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/26509459 剑指offer上的全排列相关题目. 输入一个含有8个数字的数组.推断有么有可 ...

  5. python中如何在一张图上画两条折线

    摘自:https://segmentfault.com/q/1010000002760775

  6. POJ 2479 Maximum sum POJ 2593 Max Sequence

    d(A) = max{sum(a[s1]..a[t1]) + sum(a[s2]..a[t2]) | 1<=s1<=t1<s2<=t2<=n} 即求两个子序列和的和的最大 ...

  7. 【例题 6-3 UVA - 442】Matrix Chain Multiplication

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 用栈来处理一下表达式就好. 因为括号是一定匹配的.所以简单很多. ab x bc会做abc次乘法. [代码] #include< ...

  8. 基于phonegap开发app的实践

    app开发告一段落.期间遇到不少问题,写篇文章记录一下. 为虾米要用phonegap 开发app,至少要考虑android和ios两个版本号吧,android偶能够应付,ios表示全然木有接触过.于是 ...

  9. STL MAP取消排序

    class MyLess{public: bool operator()(const CString str1,const CString str2)const { return TRUE; }}; ...

  10. 【20.23%】【codeforces 740A】Alyona and copybooks

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...