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

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

  • 相关阅读:
    Power BI 了解DAX中LASTDATE和MAX之间的区别
    js去除字符串中所有html标签 替换某特殊字符 以及获取URL 参数
    Power BI Dax 动态账期,并将该月余下的天数计入下一个月
    Power BI 设置多级文件夹
    在Excel 中对 Power BI Desktop进行分析
    Power BI:如果我创建具有垂直布局(纵向模式)的报表会怎样?
    在PowerPoint 中嵌入Power BI 方法(二)
    将 PowerPoint 作为浏览器使用
    Power Point 中嵌入Power BI
    通过自动日期/时间和DAX变量提高Power BI性能
  • 原文地址:https://www.cnblogs.com/NBIDataVis/p/11207133.html
Copyright © 2020-2023  润新知