数据源-基本操作load和save

  1. object BasicTest {
  2. def main(args: Array[String]): Unit = {
  3. val spark = SparkSession
  4. .builder()
  5. .appName("BasicTest")
  6. .master("local")
  7. .getOrCreate()
  8.  
  9. //最基本的读取(load)和保存(write)操作,操作的文件的数据格式默认是parquet
  10. val sessionDF = spark.read.load(s"${BASE_PATH}/trackerSession")
  11. sessionDF.show()
  12.  
  13. sessionDF.select("ip", "cookie").write.save(s"${BASE_PATH}/trackerSession_ip_cookie")
  14.  
  15. //可以读取多个文件目录下的数据文件
  16. val multiSessionDF = spark.read.load(s"${BASE_PATH}/trackerSession",
  17. s"${BASE_PATH}/trackerSession_ip_cookie")
  18. multiSessionDF.show()
  19.  
  20. //读取的时候指定schema
  21. val schema = StructType(StructField("ip", StringType) :: Nil)
  22. val specSessionDF = spark.read.schema(schema).load(s"${BASE_PATH}/trackerSession")
  23. specSessionDF.show()
  24.  
  25. //指定数据源数据格式
  26. //读取json文件, 且将读取出来的数据保存为parquet文件
  27. val deviceInfoDF = spark.read.format("json").load(s"${BASE_PATH}/IoT_device_info.json")
  28. spark.read.json(s"${BASE_PATH}/IoT_device_info.json").show()
  29.  
  30. deviceInfoDF.write.format("orc").save(s"${BASE_PATH}/iot")
  31. deviceInfoDF.write.orc(s"${BASE_PATH}/iot2")
  32.  
  33. //option传递参数,改变读写数据源的行为
  34. spark.read.option("mergeSchema", "true").parquet(s"${BASE_PATH}/trackerSession")
  35. deviceInfoDF.write.option("compression", "snappy").parquet(s"${BASE_PATH}/iot2_parquet")
  36.  
  37. val optsMap = Map("mergeSchema" -> "mergeSchema")
  38. spark.read.options(optsMap).parquet("")
  39.  
  40. //SaveMode
  41. //SaveMode.ErrorIfExists(对应着字符串"error"):表示如果目标文件目录中数据已经存在了,则抛异常(这个是默认的配置)
  42. //SaveMode.Append(对应着字符串"append"):表示如果目标文件目录中数据已经存在了,则将数据追加到目标文件中
  43. //SaveMode.Overwrite(对应着字符串"overwrite"):表示如果目标文件目录中数据已经存在了,则用需要保存的数据覆盖掉已经存在的数据
  44. //SaveMode.Ignore(对应着字符串为:"ignore"):表示如果目标文件目录中数据已经存在了,则不做任何操作
  45.  
  46. deviceInfoDF.write.option("compression", "snappy").mode(SaveMode.Ignore).parquet(s"${BASE_PATH}/iot/iot2_parquet")
  47. spark.read.parquet(s"${BASE_PATH}/iot/iot2_parquet").show()
  48. deviceInfoDF.write.option("compression", "snappy").mode("ignore").parquet(s"${BASE_PATH}/iot/iot2_parquet")
  49.  
  50. spark.stop()
  51. }
  52. }

  

SparkSQL读写外部数据源-基本操作load和save的更多相关文章

  1. SparkSQL读写外部数据源--csv文件的读写

    object CSVFileTest { def main(args: Array[String]): Unit = { val spark = SparkSession .builder() .ap ...

  2. SparkSQL读写外部数据源-json文件的读写

    object JsonFileTest { def main(args: Array[String]): Unit = { val spark = SparkSession .builder() .m ...

  3. SparkSQL读写外部数据源-jext文件和table数据源的读写

    object ParquetFileTest { def main(args: Array[String]): Unit = { val spark = SparkSession .builder() ...

  4. SparkSQL读写外部数据源--数据分区

    import com.twq.dataset.Utils._ import org.apache.spark.sql.{SaveMode, SparkSession} object FileParti ...

  5. SparkSQL读写外部数据源-通过jdbc读写mysql数据库

    object JdbcDatasourceTest { def main(args: Array[String]): Unit = { val spark = SparkSession .builde ...

  6. load、save方法、spark sql的几种数据源

    load.save方法的用法          DataFrame usersDF = sqlContext.read().load("hdfs://spark1:9000/users.pa ...

  7. 37、数据源之通用的load和save操作

    一.通用的load和save操作 1.概述 对于Spark SQL的DataFrame来说,无论是从什么数据源创建出来的DataFrame,都有一些共同的load和save操作. load操作主要用于 ...

  8. Update(Stage4):sparksql:第1节 SparkSQL_使用场景_优化器_Dataset & 第2节 SparkSQL读写_hive_mysql_案例

    目标 SparkSQL 是什么 SparkSQL 如何使用 Table of Contents 1. SparkSQL 是什么 1.1. SparkSQL 的出现契机 1.2. SparkSQL 的适 ...

  9. 【转载】Spark SQL之External DataSource外部数据源

    http://blog.csdn.net/oopsoom/article/details/42061077 一.Spark SQL External DataSource简介 随着Spark1.2的发 ...

随机推荐

  1. python 必选参数、默认参数、可变参数和、关键字参数

    转自:https://www.liaoxuefeng.com/wiki/897692888725344/897693568201440 可变参数 在Python函数中,还可以定义可变参数.顾名思义,可 ...

  2. mybatis-3.5.2增删查改

    这玩意没啥技术含量,只不过长时间不用,就显得生疏了.正好今天想读取一个文件写入数据库,平时都是集成环境,都碰不到这些基础东西,看来还是需要时常给自己找活干. 首先建立一个maven工程. next n ...

  3. [Linux] 在 Ubuntu 19.10 上开启 SSH 服务并允许远程登录

    在 Ubuntu 19.10 上安装 SSH,并开启服务 0.检查并确认系统当前是否已安装SSH: sudo ps -e | grep ssh 如果只有 ssh-agent 说明 ssh-server ...

  4. Python之路【第十七篇】:Python并发编程|协程

    一.协程 协程,又叫微线程,纤程.英文名Coroutine.协程本质上就是一个线程 优点1:协程极高的执行效率.因为子程序切换不是线程切换,而是由程序自身控制,因此,没有线程切换的开销,和多线程比,线 ...

  5. golang(一)

    开篇先来个Go语言的吉祥物-金花鼠Gordon. golang是谷歌2009年发布的开源编程语言,截止目前go的release版本已经到了1.10.go语言的开发人员都是计算机界大神一般的存在: Th ...

  6. python之数据解构和算法进阶

    1.解压赋值多个变量 采用解构的方法.可迭代对象才可以,变量数量与元素个数要一一对应,或者采用*万能接收. 2.解压可迭代对象赋值多个变量 如果一个可迭代对象的元素个数超过变量个数时,会抛出一个 Va ...

  7. BZOJ3514 / Codechef GERALD07 Chef and Graph Queries LCT、主席树

    传送门--BZOJ 传送门--VJ 考虑使用LCT维护时间最大生成树,那么对于第\(i\)条边,其加入时可能会删去一条边.记\(pre_i\)表示删去的边的编号,如果不存在则\(pre_i = 0\) ...

  8. C# 单元测试学习笔记

    1.什么是单元测试         2.单元测试的好处 (1)协助程序员尽快找到代码中bug的具体位置 (2)能够让程序员对自己的程序更有自信 (3)能够让程序员在提交项目之前就将代码变的更加的强壮 ...

  9. DotNet Core 2.2 MVC Razor 页面编译为 View.dll 文件的解决方法

    使用文本文件编辑器打开项目文件,找到: <PropertyGroup>     <TargetFramework>netcoreapp2.0</TargetFramewo ...

  10. for循环优化

    转自:https://blog.csdn.net/lfc18606951877/article/details/78592823 1:多个for循环时,遵循外小内大(从外至里,循环对象size要从小到 ...