DataFrame 读取与保存


Spark SQL支持多种结构化数据源,能够轻松从各种数据源中读取Row对象。这些数据源包括Hive表,JSON,Parquet,CSV等文件。


  • 从文件系统加载与保存
// hdfs上读取
val customerDF = spark.read.format("csv").mode("overwrite").option("header", true).load("hdfs:/temp/data/customer.csv")
// 保存在hdfs
customerDF.write.format("csv").save("hdfs:///temp/data/customerDF")

// 本地文件系统上读取
val customerDF = spark.read.format("csv").mode("overwrite").option("header", true).load("file:///root/data/customer.csv")
// 保存在本地
customerDF.write.format("csv").save("file:///root/data/customerDF")

注:save mode有四种如下:

mode 说明
errorifexists(default) 当数据源已经存在数据,抛出一个异常
apped 当数据源已经存在数据,将新的数据附加到原有数据上
overwrite 当数据源已经存在数据,新数据覆盖掉原有数据
Ignore 当数据源已经存在数据,忽略新数据
  • 从Hive中读取与保存
// 第一种读取方式
val orderDF = spark.table("sparkdf.orders")

// 第二种读取方式
val spark = SparkSession.builder.enableHiveSupport.getOrCreate
val orderDF = spark.sql("select * from sparkdf.orders")

// 保存DF为Hive表
orderDF.write.mode("overwrite").saveAsTable("saprkdf.orders")
  • RDB中读取与保存
// 引入jar包
spark-shell --jars mysql-connector-java.jar

// 读数据
val usersDF= spark.read.format("jdbc")
.option("url", "jdbc:mysql://localhost:3306/retail_db")
.option("driver", "com.mysql.jdbc.Driver")
.option("user", "root")
.option("password", "123456")
.option("dbtable", "users")
.load()


// 保存到mysql,首先导入Propertoes类
import java.util.Properties

val perproties = new Perproties()
perproties.put("driver", "com.mysql.jdbc.Driver")
perproties.put("user", "root")
perproties.put("password", "123456")

// 保存为mysql表
usersDF.write.mode("overwrite").jdbc("jdbc:mysql://localhost:3306/retail_db", "users", properties)

// 另一种保存方式
userDF.write.mode("overwrite").format("jdbc")
.option("url", "jdbc:mysql://localhost:3306")
.option("driver", "com.mysql.jdbc.Driver")
.option("dbtable", "retail_db.users")
.option("user", "root")
.option("password", "123456")
.save()

你可能感兴趣的:(DataFrame 读取与保存)