SparkSQL的多种数据源的读写

简介: 在SparkSQL模块,提供一套完成API接口,用于方便读写外部数据源的的数据(从Spark 1.4版本提供),框架本身内置外部数据源:

在这里插入图片描述
在这里插入图片描述

在Spark 2.4版本中添加支持Image Source(图像数据源)和Avro Source。

带头信息的:
在这里插入图片描述

import org.apache.spark.sql.{
    
    DataFrame, SparkSession}

/**
 * @author liu a fu
 * @date 2021/1/18 0018
 * @version 1.0
 * @DESC  拓展  读取数据的方式   带头信息的
 */
object _12IrisDataLoader {
    
    
  def main(args: Array[String]): Unit = {
    
    
    //1-环境准备
    val spark: SparkSession = SparkSession
      .builder()
      .appName(this.getClass.getSimpleName.stripSuffix("$"))
      .master("local[*]")
      .getOrCreate()
    spark.sparkContext.setLogLevel("WARN")

    //读取数据
    val irisDF: DataFrame = spark.read.format("csv")
      .option("header", true) //是否有header,每个文件的文件头是否存在
      .option("inferschema", true) //内置的scheme的识别
      .option("sep", ",") //切割
      .load("data/input/sql/iris1.data")

    irisDF.show()
    irisDF.printSchema()

    spark.stop()
  }

}

MySQL数据的读写:

import java.util.Properties

import org.apache.spark.sql.{
    
    DataFrame, SaveMode, SparkSession}

/**
 * @author liu a fu
 * @date 2021/1/18 0018
 * @version 1.0
 * @DESC    实现MySQL数据的读写
 */
object _13ToMySQL {
    
    
  def main(args: Array[String]): Unit = {
    
    
    //1-环境准备
    val spark: SparkSession = SparkSession
      .builder()
      .appName(this.getClass.getSimpleName.stripSuffix("$"))
      .master("local[8]")
      .getOrCreate()

	//读取数据源文件
    val DF: DataFrame = spark.read.format("csv")
      .option("header", true)
      .option("inferschema", true)
      .option("sep", " ")
      .load("data/input/sql/people.txt")

      DF.printSchema()
    /**
     * root
     * |-- id: integer (nullable = true)
     * |-- name: string (nullable = true)
     * |-- age: integer (nullable = true)
     */

      DF.show()
    /**
     * +---+--------+---+
     * | id|    name|age|
     * +---+--------+---+
     * |  1|zhangsan| 20|
     * |  2|    lisi| 29|
     * |  3|  wangwu| 25|
     * |  4| zhaoliu| 30|
     * |  5|  tianqi| 35|
     * |  6|    kobe| 40|
     * |  7|    kobe| 41|
     * +---+--------+---+
     */

    /**
     * 写入MySQL
     */
    //方法1
/*    val prop = new Properties()
    prop.setProperty("user","root")
    prop.setProperty("password","root")
    DF
      .write
      .mode(SaveMode.Overwrite)
      .jdbc("jdbc:mysql://127.0.0.1:3306/sparktest?useSSL=false","person",prop)*/

    //写法2
 /*   DF
      .write
      .mode(SaveMode.Overwrite)
      .option("driver", "com.mysql.jdbc.Driver")
      .option("user", "root")
      .option("password", "root")
      .jdbc("jdbc:mysql://127.0.0.1:3306/sparktest?useSSL=false", "person", new Properties())*/


    /**
     * 从MySQL中读取数据
     */
    val prop = new Properties()
    prop.setProperty("user","root")
    prop.setProperty("password","root")
    val fromMySQLToSpark: DataFrame = spark.read.jdbc("jdbc:mysql://127.0.0.1:3306/sparktest?useSSL=false", "person", prop)
    fromMySQLToSpark.show()

    //写入到csv.
    DF
      .coalesce(1)
      .write.mode("overwrite")
      .csv("data/output/xxxx")

    spark.stop()
  }
}

参数解释:

  • Load 加载数据 读取外部数据源的数据
    在这里插入图片描述
  • Save 保存数据
    在这里插入图片描述
  • 保存模式(SaveMode)
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_49834705/article/details/112804248
今日推荐