SparkSQL扩展读写

Reader

  @Test
  def reader(): Unit ={
    val spark = SparkSession.builder()
      .appName("reader_test")
      .master("local[*]")
      .getOrCreate()

    val reader: DataFrameReader = spark.read
    
    reader
      .format("csv")
      .option("header", true)
      .option("inferSchema",true)
      .load("dataset/PRSA_data_2010.1.1-2014.12.31.csv")
      .show()
	// .csv 底层依旧是 format.load , 只是框架做了一层封装
    reader
      .option("header", true)
      .option("inferSchema",true)
      .csv("dataset/PRSA_data_2010.1.1-2014.12.31.csv")
      .show()
  }

DataFrameReader 三大组件

  1. schema - 结构信息
  2. option - 可选参数
  3. format - 数据格式

Writer

DataFrameWriter 组件

  1. source - 写入目标
  2. mode - 写入模式
  3. extraOption - 外部参数
  4. partitioningColumns - 分区
  5. bucketColumnNames - 分桶
  6. sortColumnNames - 排序
  @Test
  def writer(): Unit = {
	// 因为需要 写入 ,所以 需要 winutils.exe , 不然启动报错
    System.setProperty("hadoop.home.dir", "D:\\software\\hadoop\\hadoop-2.7.2")

    val spark = SparkSession.builder()
      .appName("writer")
      .master("local[*]")
      .getOrCreate()

    val reader: DataFrameReader = spark.read

    val df = reader
      .option("header", true)
      .option("inferSchema", true)
      .csv("dataset/PRSA_data_2010.1.1-2014.12.31.csv")

    df.write.json("dataset/PRSA_data1.json")

    df.write.format("json").save("dataset/PRSA_data2.json")

  }

链接:百度云盘 - winutils.exe
提取码:4ewn

Parquet


  @Test
  def parquet(): Unit = {
    System.setProperty("hadoop.home.dir", "D:\\software\\hadoop\\hadoop-2.7.2")

    val spark = SparkSession.builder()
      .appName("parquet")
      .master("local[*]")
      .getOrCreate()

    //    1. 读取 csv 文件
    val df = spark.read.option("header", true)
      .csv("dataset/PRSA_data_2010.1.1-2014.12.31.csv")

    //    2. 保存为 parquet 文件

    //    小细节:写入的时候默认格式就是 parquet
    df.write
      //      写入格式 报错,覆盖,追加,忽略
      //      小细节:默认报错
      .mode(SaveMode.Overwrite)
      .format("parquet")
      .save("dataset/PRSA_data3")


    //    3. 读取 parquet 文件
    //    小细节:读取默认文件格式为 parquet
    //    可以读取文件夹
    val frame = spark.read
      .load("dataset/PRSA_data3")
    frame.show(10)
  }

  /**
    * 表分区的概念不仅在 parquet 上有,其他格式的文件也可以指定表分区
    */
  @Test
  def parquetPartitions(): Unit = {
    System.setProperty("hadoop.home.dir", "D:\\software\\hadoop\\hadoop-2.7.2")

    val spark = SparkSession.builder()
      .appName("parquet")
      .master("local[*]")
      .getOrCreate()

    //    1. 读取 csv 文件
    val df = spark.read.option("header", true)
      .csv("dataset/PRSA_data_2010.1.1-2014.12.31.csv")

    //    写入表分区
    df.write
      .partitionBy("year", "month")
      .save("dataset/PRSA_data4")

    //    读分区表
    spark.read
      .parquet("dataset/PRSA_data4")
      .printSchema()
  }

JSON

  @Test
  def json(): Unit = {

    System.setProperty("hadoop.home.dir", "D:\\software\\hadoop\\hadoop-2.7.2")

    val spark = SparkSession.builder()
      .appName("parquet")
      .master("local[*]")
      .getOrCreate()

    //    1. 读取 csv 文件
    val df = spark.read.option("header", true)
      .csv("dataset/PRSA_data_2010.1.1-2014.12.31.csv")

    //    df.write.json("dataset/PRSA_data5")

    spark.read.json("dataset/PRSA_data5").show(10)
  }

  @Test
  def json2(): Unit = {

    System.setProperty("hadoop.home.dir", "D:\\software\\hadoop\\hadoop-2.7.2")

    val spark = SparkSession.builder()
      .appName("parquet")
      .master("local[*]")
      .getOrCreate()

    //    1. 读取 csv 文件
    val df: DataFrame = spark.read.option("header", true)
      .csv("dataset/PRSA_data_2010.1.1-2014.12.31.csv")

    //    把 Dataset[Object] 转为 Dataset[JsonString]
    df.toJSON.show(10)

    //    可以直接从RDD 读取json的dataframe 把 Dataset[JsonString] 转为 DataSet[Object]
    val jsonrdd = df.toJSON.rdd
    spark.read.json(jsonrdd).show(10)
  }
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值