9.3.2、Spark Sql

9.3.2、Spark Sql,第1张

9.3.2、Spark Sql 1、读取json格式数据
spark.read.format("json").load("XXXX")
2、读取文本文件
option("seq", ",") //指定分隔符
spark.read
  .format("csv")
  .option("sep", ",") //指定分隔符
  .schema("id String,name String,age Int,gender String,clazz String")
  .load("sparkproject/data/students.txt")
  .show()
3、JDBC读取Mysql数据
spark.read
  .format("jdbc")
  .option("url", "jdbc:mysql://master:3306/shujiaku")
  .option("dbtable", "student")
  .option("user", "root")
  .option("password", "123456")
  .load()
  .show()
4、读取parquet格式数据

无法直接查看,默认会进行压缩,自带表结构
—读取数据不需要指定schema
—默认使用snappy压缩方式进行压缩

   //将数据保存成Parquet格式保存
//    jdbcDF.write
//      .mode(SaveMode.Overwrite)
//      .parquet("sparkproject/data/new_res")

    spark.read
      .format("parquet")
      .load("sparkproject/data/new_res")
      .show()
5、读取orc格式的数据
默认进行压缩,空间占有率小,默认带有表结构
    //将数据保存成ORC格式保存
//        jdbcDF.write
//          .mode(SaveMode.Overwrite)
//          .orc("sparkproject/data/new_orc")

    spark.read
      .format("orc")
      .load("sparkproject/data/new_orc")
      .show()
6、从RDD构建Dataframe

(1)RDD转Dataframe

—toDF:需要导入隐式转换 import spark.implicits._

//读取文件RDD格式
  val stuRDD: RDD[String] = spark.sparkContext
    .textFile("sparkproject/data/students.txt")
  //先将数据切出来
  val tupleRDD = stuRDD.map(line => {
    val splits: Array[String] = line.split(",")
    val id: String = splits(0)
    val name: String = splits(1)
    val age: String = splits(2)
    val gender: String = splits(3)
    val clazz: String = splits(4)
    Students(id, name, age, gender, clazz)
  })

  //需要导入隐式转换
  import spark.implicits._

  //没有列名,加入列名
  //val sDF: Dataframe = tupleRDD.toDF("id", "name", "age", "gender", "clazz")
  //有了样例类格式就是有了表头
  val sDF: Dataframe = tupleRDD.toDF()
  sDF.show()
}

//样例类
case class Students(id: String, name: String, age: String, gender: String, clazz: String)

(2)Dataframe转RDD

—rdd:调用rdd方法返回的是Row格式的RDD
—Row也是一种数据格式,可以使用getAs方法取里面的每一列数据

 
  val rdd: RDD[Row] = sDF.rdd

  rdd.foreach(row => {
    //Row对象通过getAs取每一列数据
    val id: String = row.getAs[String]("id")
    val name: String = row.getAs[String]("name")
    println(s"$id,$name")
  })

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5611150.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-15
下一篇2022-12-15

发表评论

登录后才能评论

评论列表(0条)

    保存