Save Modes:
Save操作可以选择使用SaveMode,它指定如果存在的话如何处理现有数据。重要的是要认识到这些保存模式不使用任何锁定,也不是原子的。此外,当执行覆盖时,数据将在写入新数据之前被删除。
实践
1.读取一个json文件进行测试:
scala> val df = spark.read.format("json").load("file:///root/data/json_schema_infer.json")
df: org.apache.spark.sql.DataFrame = [age: bigint, gender: string ... 2 more fields]
scala> df.show
显示结果:
2.使用overwrite方式以parquet形式写出去:
df.select("name").write.format("parquet").mode("overwrite").save("file:///root/data/overwrite")
在目录中就会生成相应的文件,再次执行还会生成,但是生成的时间变了,因为覆盖了以前生成的文件
3.使用append方式以parquet形式写出去:
scala> df.select("name").write.format("parquet").mode("append").save("file:///root/data/overwrite")
不会覆盖之前的文件,会生成新的文件:
4.使用ignore方式以parquet形式写出去:
scala> df.select("name").write.format("parquet").mode("ignore").save("file:///root/data/overwrite")
在这个目录下如果有这种类型的文件就不会生成,如果没有就会创建.