Spark Sql之数据源

 读数据

  1.  Spark默认支持夺中数据源文件:parquet、csv、jdbc、orc、text、textFile、format......
  2. 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
        }
    }
    

     

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值