Spark中的DataSources数据源

Spark中的Data Sources (数据源)

Spark SQL 支持通过 DataFrame 接口对各种 data sources (数据源)进行操作. DataFrame 可以使用 relational transformations (关系转换)操作, 也可用于创建 temporary view (临时视图). 将 DataFrame 注册为 temporary view (临时视图)允许您对其数据运行 SQL 查询. 本节 描述了使用 Spark Data Sources 加载和保存数据的一般方法, 然后涉及可用于 built-in data sources (内置数据源)的 specific options (特定选项).

Generic Load/Save Functions (通用 加载/保存 功能)

在最简单的形式中, 默认数据源(parquet, 除非另有配置 spark.sql.sources.default )将用于所有操作.

1
2
val usersDF = spark.read.load("examples/src/main/resources/users.parquet")
usersDF.select("name","favorite_color").write.save("namesAndFavColors.parquet")

Manually Specifying Options (手动指定选项)

您还可以 manually specify (手动指定)将与任何你想传递给 data source 的其他选项一起使用的 data source . Data sources 由其 fully qualified name (完全限定名称)(即 org.apache.spark.sql.parquet ), 但是对于 built-in sources (内置的源), 你也可以使用它们的 shortnames (短名称)(json, parquet, jdbc, orc, libsvm, csv, text).从任何 data source type (数据源类型)加载 DataFrames 可以使用此 syntax (语法)转换为其他类型

1
2
val peopleDF = spark.read.format("json").load("examples/src/main/resources/people.json")
peopleDF.select("name", "age").write.format("parquet").save("namesAndAges.parquet")

Run SQL on files directly (直接在文件上运行 SQL)

不使用读取 API 将文件加载到 DataFrame 并进行查询, 也可以直接用 SQL 查询该文件.

1
val sqlDF = spark.sql("SELECT * FROM parquet.`examples/src/main/resources/users.parquet`")

Save Modes (保存模式)

Save operations (保存操作)可以选择使用 SaveMode , 它指定如何处理现有数据如果存在的话. 重要的是要意识到, 这些 save modes (保存模式)不使用任何 locking (锁定)并且不是 atomic (原子). 另外, 当执行 Overwrite 时, 数据将在新数据写出之前被删除.

Scala/Java Any Language Meaning
SaveMode.ErrorIfExists (default) “error” (default) 将 DataFrame 保存到 data source (数据源)时, 如果数据已经存在, 则会抛出异常.
SaveMode.Append “append” 将 DataFrame 保存到 data source (数据源)时, 如果 data/table 已存在, 则 DataFrame 的内容将被 append (附加)到现有数据中.
SaveMode.Overwrite “overwrite” Overwrite mode (覆盖模式)意味着将 DataFrame 保存到 data source (数据源)时, 如果 data/table 已经存在, 则预期 DataFrame 的内容将 overwritten (覆盖)现有数据.
SaveMode.Ignore “ignore” Ignore mode (忽略模式)意味着当将 DataFrame 保存到 data source (数据源)时, 如果数据已经存在, 则保存操作预期不会保存 DataFrame 的内容, 并且不更改现有数据. 这与 SQL 中的 CREATE TABLE IF NOT EXISTS 类似.
-------------End Of This ArticleThank You For Reading-------------