史上最简单的spark教程第十二章-SparkSQL编程Java案例实践(四)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/youbitch1/article/details/88973028

Spark-SQL的Java实践案例(四)

数据源:(读取与存储数据,JDBC服务器)

史上最简单的spark教程
所有代码示例地址:https://github.com/Mydreamandreality/sparkResearch

(提前声明:文章由作者:张耀峰 结合自己生产中的使用经验整理,最终形成简单易懂的文章,写作不易,转载请注明)
(文章参考:Elasticsearch权威指南,Spark快速大数据分析文档,Elasticsearch官方文档,实际项目中的应用场景)
(帮到到您请点点关注,文章持续更新中!)
Git主页 https://github.com/Mydreamandreality

在这里我们继续上一章节SparkSQL的案例啊,没有看上一章节的兄弟萌 点击这里哈https://blog.csdn.net/youbitch1/article/details/88852644

这章我们来搞 数据源:(读取与存储数据,JDBC服务器)

  • sparkSQL支持很多种结构化的数据源,并且把内部复杂的细节都封装了起来,方便我们从各种数据源轻松的获取Row对象
  • 数据源包括但不限:parquet,hive表,JSON等等
  • 而且当我们使用SQL查询数据源中的数据,并且只用到了一部分字段的时候,sparkSQL可以很智能的只扫描我们用到的这些字段
  • 当然除了数据源我们还可以把RDD转换成dataframe,就是我们上面的例子,然后执行SQL查询,贼简单
    在这里插入图片描述

代码案例:


parquet

  • parquet是一种强大的列式存储格式,它可以高效的存储嵌套格式的字段,SparkSQL提供了直接读取存储parquet格式文件的方法
  • 代码案例:
        SparkSession sparkSession = SparkSession.builder()
                .master("local")
                .appName("spark app")
                .getOrCreate();

        Dataset<Row> rddDataset = sparkSession.read().parquet("usr/local/data.parquet");
        rddDataset.select("name","age").write().save("nameAndAge.parquet");

JSON

  • JSON是一种半结构化/结构化的存储格式,如果兄弟萌的数据格式符合json的定义,那么sparkSQL就可以扫描j文件推测出结构信息,并且可以使我们通过名称访问字段
  • 代码案例:
        Dataset<Row> jsonDataSet = sparkSession.read().json("usr/local/data.json");
        jsonDataSet.select("name","age").write().save("nameAndAge.parquet");


  • 抽象点说,比方说我们的数据是这样的:
{
    "name": "Sparky The Bear", 
    "lovesPandas":true,
    "knows": {"friends":["holden"]}
 
}

那么扫描解析后就是这个样子 ↓

root
 |-- knows: struct (nullable = true)
 | |-- friends: array (nullable = true)
 | | |-- element: string (containsNull = false)
 |-- lovesPandas: boolean (nullable = true)
 |-- name: string (nullable = true)

手动指定数据源选项:

  • 可以看到,我们刚才读取指定的数据源都是通过内置的源函数
  • 比如 spark.read().json() 或者.parquet() 等
  • 我们还可以手动指定任何你想传递的数据源类型
  • 代码案例:
        //手动指定数据源
        Dataset<Row> customDataSource = sparkSession.read().format("json").load("usr/local/data.json");
customDataSource.select("name","age").write().format("json").save("nameAndAge.json");

保存模式

  • 说了这么久了,兄弟萌,我们的数据保存模式是怎么样我们还不知道
  • 保存模式抽象点说就是我们的想怎么样保存数据,追加还是覆盖还是其他的方式
Java函数 模式 详解
SaveMode.ErrorIFExists(default) “error”(default) 将DataFrame保存到(数据源)时,.如果数据已经存在,则抛出异常.
SaveMode.Append “append” 如果数据存在,则追加
SaveMode.Overwrite “overwrite” 如果数据存在则覆盖
SaveMode.Ignore “ignore” 如果数据存在,则忽略,不影响原先数据,也不会保存现在的数据

代码案例:

customDataSource.select("name","age").write().format("json").
mode(SaveMode.Append).save("nameAndAge.json");

在这里插入图片描述

未完待续兄弟萌

猜你喜欢

转载自blog.csdn.net/youbitch1/article/details/88973028