SparkSQL读取和写出数据的几种方式

一、parquet格式的数据

parquet是一种列式存储格式的文件类型。存储时可以通过牛X的压缩算法节省存储空间,读取数据时只需要读取所需的列,提高读取性能

1. 生成parquet格式的数据

使用 Idea 或 ScalaIDE 创建一个 maven 项目,pom依赖在文章的末尾;在项目中创建一个 scala class,编写如下代码:

PS:不清楚如何创建Spark项目的小伙伴可以看我的这篇文章(如何开发SparkSQL项目?),其实创建Spark的项目和maven的项目没啥太大的区别,只是添加了一个ScalaSDK,在 IDEA 上安装了一个插件而已,很简单。

import org.apache.log4j.{
   Level, Logger}
import org.apache.spark.SparkConf
import org.apache.spark.sql.{
   SaveMode, SparkSession}

import scala.collection.mutable.ArrayBuffer

/**
 * 用户样本类
 * @param user_id 用户id
 * @param user_name 用户名称
 */
case class User(user_id: Int, user_name: String)

object ParquetDemo {
   
  def main(args: Array[String]): Unit = {
   
  	// 配置SparkSession的相关信息
    val conf = new SparkConf().setAppName("parquetDemo").setMaster("local[*]")
    // 创建SparkSession
    val spark = SparkSession.builder().config(conf).getOrCreate()
    // 获取SparkContext
    val sc = spark.sparkContext
    // 注:在实际spark开发中上面的几行代码基本属于标配,固定格式,不会有太大的改动

    // 创建一个可变数组,向数组中添加10个用户
    val rows = ArrayBuffer[User]()
    for (i <- 0 until 10) {
   
      rows += User(i, s"name${i}")
    }
    // 将数组转变成不可变数组
    val rowArray = rows.toArray
    // 使用用户数组来创建RDD
    val rowRDD = sc.parallelize(rowArray)

    // 导入spark的隐式转换函数toDF,将RDD转换成DataFrame
    import spark.implicits._
    // 会在当前项目的根目录创建一个spark-warehouse文件夹,里面会有一个user文件夹,里面会生成一些.parquet文件
    rowRDD.toDF().write.mode(SaveMode.Overwrite).saveAsTable("user")
  }
}

运行上述代码,我们会在项目根目录下发现生成了如下.parquet文件:
在这里插入图片描述

  • _SUCCESS文件是一个标记文件,里面没有内容,是spark程序运行成功的一个标示(MapReduce运行成功时也有)
  • 文件后缀为.parquet的文件就是真正的数据文件了。
  • 其余的以.crc文件结尾的是一些校验文件,只有在windows平台下运行才会生成,在Linux平台上运行是不会生成的,无需理会。
2. 读取parquet格式的数据

我们通过前一个例子生成了.parquet格式的文件,打开一看发现都是乱码,那么我们该如何读取查看这类.parquet格式的数据呢?

在前一个示例代码的基础上,添加如下代码即可读取.parquet格式的数据:

// 把下面生成.parquet文件这行代码注释掉
// rowRDD.toDF().write.mode(SaveMode.Overwrite).saveAsTable("user")

// 读取.parquet格式的文件
val localDF = spark.read.load("E:\\personal-project\\localhive\\spark-warehouse\\user")
// 展示读取到的数据
localDF.show

再次运行代码,运行结果如下:
在这里插入图片描述
成功读取到了我们之前模拟生成的用户数据,而且显示的格式还非常好看。

二、JSON格式的数据

1. 读取json格式的数据

json 格式的数据大家都清楚长什么样&#x

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值