11.1 通用加载和保存函数
默认数据源是parquet
, 我们也可以通过使用:spark.sql.sources.default
这个属性来设置默认的数据源.
val usersDF = spark.read.load("examples/src/main/resources/users.parquet")
usersDF.select("name", "favorite_color").write.save("namesAndFavColors.parquet")
说明:
spark.read.load
是加载数据的通用方法.df.write.save
是保存数据的通用方法.
手动指定选项
也可以手动给数据源指定一些额外的选项. 数据源应该用全名称来指定, 但是对一些内置的数据源也可以使用短名称:json, parquet, jdbc, orc, libsvm, csv, text
al peopleDF = spark.read.format("json").load("examples/src/main/resources/people.json")
peopleDF.select("name", "age").write.format("parquet").save("namesAndAges.parquet")
在文件上直接运行 SQL
我们前面都是使用read
API 先把文件加载到 DataFrame
, 然后再查询. 其实, 我们也可以直接在文件上进行查询
scala> spark.sql("select * from json.`examples/src/main/resources/people.json`")
说明:
json
表示文件的格式. 后面的文件具体路径需要用反引号括起来.
文件保存选项(SaveMode)
保存操作可以使用 SaveMode, 用来指明如何处理数据. 使用mode()
方法来设置.
有一点很重要: 这些 SaveMode 都是没有加锁的, 也不是原子操作. 还有, 如果你执行的是 Overwrite 操作, 在写入新的数据之前会先删除旧的数据.
Scala/Java | Any Language | Meaning |
---|---|---|
SaveMode.ErrorIfExists (default) |
"error" (default) |
如果文件已经存在则抛出异常 |
SaveMode.Append |
"append" |
如果文件已经存在则追加 |
SaveMode.Overwrite |
"overwrite" |
如果文件已经存在则覆盖 |
SaveMode.Ignore |
"ignore" |
如果文件已经存在则忽略 |