读数据
- Spark默认支持夺中数据源文件:parquet、csv、jdbc、orc、text、textFile、format......
- spark Sql通用读取数据格式:
sparkSession.read.load("path")
// 等价于
sparkSession.read.parquet("path")
- 注意:上面语句默认是读取的 parquet 格式的文件,如果文件格式不是parquet会报错,那如何读取非parquet格式的文件
sparkSession.read.format("json").load("path")
3. 直接在文件上运行sql
spark.sql("select * from json.path").show
写数据
// 默认写文件格式也是parquet
df.write.save("path")
- 写成json格式的文件呢?
df.write.format("json").save("path")
// 覆盖
df.write.format("json").mode("overwrite").save("path")
// 追加
df.write.format("json").mode("append").save("path")
- SaveMode 文件保存选项
SaveMode.ErrorIfExists(default) | "error"(default) | 如果文件已经存在则抛出异常 |
SaveMode.Append | "append" | 如果文件已经存在则追加 |
SaveMode.Overwrite | "overwrite" | 如果文件已经存在则覆盖 |
SaveMode.Ignore | "ignore" | 如果文件已经存在则忽略 |
读取JDBC
def main(args: Array[String]): Unit = {
val spark: SparkSession = SparkSession.builder().master("local[*]").appName("haha").getOrCreate()
import spark.implicits._
val ssc: SparkContext = spark.sparkContext
// 方法一
val jdbcDF: DataFrame = spark.read
.format("jdbc")
.option("url", "jdbc:mysql://hadoop201:3306/rdd")
.option("user", "root")
.option("password", "aaa")
.option("dbtable", "user")
.load()
jdbcDF.show()
// 方法二:
val props: Properties = new Properties()
props.setProperty("user","root")
props.setProperty("password","aaa")
val df: DataFrame = spark.read.jdbc("jdbc:mysql://hadoop201:3306","user",props)
df.show()
}
写JDBC
object test11 {
def main(args: Array[String]): Unit = {
val spark: SparkSession = SparkSession.builder().master("local[*]").appName("haha").getOrCreate()
import spark.implicits._
val ssc: SparkContext = spark.sparkContext
val rdd: RDD[User] = spark.sparkContext.parallelize(Array(User("lisi",10,"ls"),User("zhangsan",20,"zs")))
val ds: Dataset[User] = rdd.toDS()
// 方法一
ds.write
.format("jdbc")
.option("url", "jdbc:mysql://hadoop201:3306/rdd")
.option("user", "root")
.option("password", "aaa")
.option("dbtable", "user")
.mode(SaveMode.Append)
.save()
// 方法二:
val props: Properties = new Properties()
props.setProperty("user", "root")
props.setProperty("password", "aaa")
ds.write.mode(SaveMode.Append).jdbc("jdbc:mysql://hadoop201:3306/rdd", "user", props)
}
}
case class User(name:String, age: Long, friends: String)
读取Hive数据库
spark读取hive数据库,一般不适用内嵌的hive,而使用外置的hive数据库。
-
步骤1: 拷贝 hive-site.xml 到 resources 目录下
-
导入依赖
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-hive_2.11</artifactId>
<version>2.1.1</version>
</dependency>
- 代码实现
import org.apache.spark.sql.SparkSession object HiveDemo { def main(args: Array[String]): Unit = { val spark: SparkSession = SparkSession .builder() .master("local[*]") .appName("Test") .enableHiveSupport() .getOrCreate() import spark.implicits._ import spark.sql sql("select * from emp").show } }