SparkSql保存数据
package day05
import org.apache.spark.sql.{DataFrame, Dataset, SaveMode, SparkSession}
object DataSourceDemo {
def main(args: Array[String]): Unit =
{
val spark: SparkSession = SparkSession .builder() .master("local[*]") .appName("Test") .getOrCreate()
import spark.implicits._
//读取json
val jsonDF: DataFrame = spark.read.json("target/classes/user.json")
//保存为parquet
jsonDF.write.mode(SaveMode.Overwrite).parquet("target/classes/user.parquet")
//读取parquet
val parDF: DataFrame = spark.read.parquet("target/classes/user.parquet")
//样例类DF转换DS
val userDS: Dataset[User] = parDF.as[User]
userDS.map(user => {user.name = "zl"; user.friends(0) = "志玲";user}).show()
}
}
case class User(var name:String, age: Long, friends: Array[String])
⽂件保存选项(SaveMode)
保存操作可以使⽤ SaveMode, ⽤来指明如何处理数据. 使⽤ mode() ⽅法来设置. 有⼀点很重要: 这些 SaveMode 都是没有加锁的, 也不是原⼦操作. 还有, 如果你执⾏的是 Overwrite 操 作, 在写⼊新的数据之前会先删除旧的数据.
Scala/Java Any Language Meaning
SaveMode.ErrorIfExists (default) "error" (default) 如果⽂件已经存在则抛出异常
SaveMode.Append "append" 如果⽂件已经存在则追加
SaveMode.Overwrite "overwrite" 如果⽂件已经存在则覆盖
SaveMode.Ignore "ignore" 如果⽂件已经存在则忽略