DataSource

复制代码
package com.shujia.spark.sql

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

object Demo2DataSource {
  def main(args: Array[String]): Unit = {
    val spark: SparkSession =SparkSession
      .builder()
      .appName("source")
      .master("local")
      .getOrCreate()

    /**
      * 读取json格式数据
      * json 中自带列名和列的类型 ,spark在读取的过程中会自动解析
      */
    spark.read
      .format("json")
      .load("data/students.json")
      .show()

    /**
      * 读取CSV格式的数据
      *
      */

    val csvDF: DataFrame =spark
      .read
      .format("csv")
      //增加列分隔方式,默认是逗号
      .option("sep",",")
      //增加表结构
      .schema("id String,name String,age Int,gender String,clazz String")
      .load("data/students.txt")

    csvDF.show()
    csvDF.printSchema()

    /**
      * 保存为parquet格式
      *
      */
//    csvDF.write.mode(SaveMode.Overwrite).parquet("data/parquet")

    /**
      *
      * 读取parquet格式数据
      * 1、自带列名
      * 2、数据会压缩(压缩和解压需要时间,压缩比一般在5倍左右)
      * 3、可以兼容hive
      */
    val parquetDF: DataFrame =spark
      .read
      .format("parquet")
      .parquet("data/parquet")

    parquetDF.show()
    parquetDF.printSchema()

//    csvDF.write.mode(SaveMode.Overwrite).orc("data/orc")

    /**
      * 读取orc格式
      * 1、自带列名
      * 2、数据会压缩 (压缩和解压需要时间,压缩比一般在5倍左右)
      * 3、可以兼容hive
      */
    val orcDF: DataFrame =spark
      .read
      .format("orc")
      .load("data/orc")
    orcDF.show()
    orcDF.printSchema()

    /**
      * 读取jdbc中的数据
      *
      */

    val jdbcDF: DataFrame =spark.read
      .format("jdbc")
      .option("url","jdbc:mysql://master:3306")
      .option("dbtable","student.student")
      .option("user", "root")
      .option("password", "123456")
      .load()

    jdbcDF.show()

    /**
      * 将数据保存到mysql
      *
      */

    orcDF.write
      .format("jdbc")
      .mode(SaveMode.Overwrite)
      .option("url", "jdbc:mysql://master:3306?useUnicode=true&characterEncoding=utf-8")
      .option("dbtable", "student.student1")
      .option("user", "root")
      .option("password", "123456")
      //手动指定列的类型
      .option("createTableColumnTypes", "name varchar(64), id  varchar(64),age int,gender  varchar(64),clazz  varchar(64)")
      .save()



  }
}
复制代码

 

posted @   坤坤无敌  阅读(311)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
点击右上角即可分享
微信分享提示