ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

SpringBoot+SparkSQL操作JSON字符串

2021-05-21 12:02:40  阅读:209  来源: 互联网

标签:score name JSON janino SparkSQL sc org sqlContext SpringBoot


在SpringBoot中通过maven来做包管理构建,有几个地方需要注意一下的,需要解决包之间的冲突,否则运行时会报错:

(1)sparkSQL中需要先排除两个包:

 1         <dependency>
 2             <groupId>org.apache.spark</groupId>
 3             <artifactId>spark-sql_2.11</artifactId>
 4             <version>${spark.version}</version>
 5             <exclusions>
 6                 <exclusion>
 7                     <groupId>org.codehaus.janino</groupId>
 8                     <artifactId>janino</artifactId>
 9                 </exclusion>
10                 <exclusion>
11                     <groupId>org.codehaus.janino</groupId>
12                     <artifactId>commons-compiler</artifactId>
13                 </exclusion>
14             </exclusions>
15         </dependency>

(2)重新引入:

 1         <dependency>
 2             <groupId>org.codehaus.janino</groupId>
 3             <artifactId>commons-compiler</artifactId>
 4             <version>2.7.8</version>
 5         </dependency>
 6 
 7         <dependency>
 8             <groupId>org.codehaus.janino</groupId>
 9             <artifactId>janino</artifactId>
10             <version>2.7.8</version>
11         </dependency>

ok,准备工作做完之后,开始代码层面得工作:

主要给大家演示的场景是将json字符串转换成临时表,然后通过sparkSQL操作临时表,非常简单方便:

 1 public class SparkJsonSQL {
 2 
 3     public void Exec(){
 4         SparkConf conf = new SparkConf();
 5         conf.setMaster("local[2]").setAppName("jsonRDD");
 6         JavaSparkContext sc = new JavaSparkContext(conf);
 7         SQLContext sqlContext = new SQLContext(sc);
 8 
 9         JavaRDD<String> nameRDD = sc.parallelize(Arrays.asList(
10                 "{\"name\":\"zhangsan\",\"age\":\"18\"}",
11                 "{\"name\":\"lisi\",\"age\":\"19\"}",
12                 "{\"name\":\"wangwu\",\"age\":\"20\"}"
13         ));
14         JavaRDD<String> scoreRDD = sc.parallelize(Arrays.asList(
15                 "{\"name\":\"zhangsan\",\"score\":\"100\"}",
16                 "{\"name\":\"lisi\",\"score\":\"200\"}",
17                 "{\"name\":\"wangwu\",\"score\":\"300\"}"
18         ));
19 
20         Dataset<Row> namedf = sqlContext.read().json(nameRDD);
21         Dataset<Row> scoredf = sqlContext.read().json(scoreRDD);
22         namedf.registerTempTable("name");
23         scoredf.registerTempTable("score");
24 
25         Dataset<Row> result = sqlContext.sql("select name.name,name.age,score.score from name,score where name.name = score.name");
26         //Dataset<Row> result = sqlContext.sql("select * from name");
27         result.show();
28         result.foreach(x ->System.out.print(x));
29         sc.stop();
30     }
31 }

我们将程序运行起来看看效果:

 

标签:score,name,JSON,janino,SparkSQL,sc,org,sqlContext,SpringBoot
来源: https://blog.51cto.com/u_14465598/2800835

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有