栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

9.3.2、Spark Sql

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")
  })
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/605005.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号