SpringBoot+SparkSQL操作JSON字符串

在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 }

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

 

转载于:https://www.cnblogs.com/NBIDataVis/p/11207133.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用Spring Boot和Netty来实现对Json字符串的处理。首先,你需要在Spring Boot项目中集成Netty依赖。可以在你的pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> <version>4.1.52.Final</version> </dependency> ``` 接下来,你可以创建一个Netty服务器来处理Json字符串。这里是一个简单的示例: ```java import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.ChannelInitializer; import io.netty.channel.ChannelOption; import io.netty.channel.EventLoopGroup; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.SocketChannel; import io.netty.channel.socket.nio.NioServerSocketChannel; import io.netty.handler.codec.LineBasedFrameDecoder; import io.netty.handler.codec.string.StringDecoder; import io.netty.handler.codec.string.StringEncoder; public class JsonServer { private int port; public JsonServer(int port) { this.port = port; } public void run() throws Exception { EventLoopGroup bossGroup = new NioEventLoopGroup(); EventLoopGroup workerGroup = new NioEventLoopGroup(); try { ServerBootstrap b = new ServerBootstrap(); b.group(bossGroup, workerGroup) .channel(NioServerSocketChannel.class) .childHandler(new ChannelInitializer<SocketChannel>() { @Override public void initChannel(SocketChannel ch) throws Exception { ch.pipeline().addLast(new LineBasedFrameDecoder(1024)); ch.pipeline().addLast(new StringDecoder()); ch.pipeline().addLast(new StringEncoder()); ch.pipeline().addLast(new JsonHandler()); } }) .option(ChannelOption.SO_BACKLOG, 128) .childOption(ChannelOption.SO_KEEPALIVE, true); System.out.println("Server started on port " + port); b.bind(port).sync().channel().closeFuture().sync(); } finally { workerGroup.shutdownGracefully(); bossGroup.shutdownGracefully(); } } public static void main(String[] args) throws Exception { int port = 8080; new JsonServer(port).run(); } } ``` 在上面的示例中,我们创建了一个简单的Netty服务器,并使用`StringDecoder`和`StringEncoder`来处理字符串的编码和解码。`JsonHandler`是自定义的处理器,你可以在其中实现对Json字符串的处理逻辑。 现在你可以运行这个服务器,并通过发送Json字符串与服务器进行交互。你可以根据自己的需求在`JsonHandler`中添加相应的处理逻辑。 需要注意的是,这只是一个简单的示例,你可能需要根据具体的业务需求进行适当的修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值