ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

SparkSql(2)

2021-09-22 21:34:12  阅读:194  来源: 互联网

标签:jdbc option val hive prop SparkSql spark


7.分区,分桶,排序

分区是按某个字段以目录级别划分
分桶是按某个字段以文件级别划分
排序是按照某个字段在文件内部(每个桶)有序
注意:
如果使用分桶和排序,必须使用持久化表
如果数据的数量较小,有的达不到设置的分桶数

def bps(spark:SparkSession)={
      import spark.implicits._
      val bpsDF=spark.read.load("D://work/path")
      bpsDF.write
        .partitionBy("flag")
        .sortBy("sqrt")
        .bucketBy(5,"number")
        .option("path","D://work/path1")

        .saveAsTable("sqrtAndcube")
        
    }

8.合并schema

两个相同路径下的DF可以按照字段名做merge合并
如果想把所有列全部显示,读取数据的时候需要开启merge开关
option(“mergeSchema”,“true”)

def schemaMerge(spark:SparkSession)={
      //创建第一个RDD
      import spark.implicits._
      val sc=spark.sparkContext
      sc.parallelize(List(1,2,3,6,5))
        .map(n=>(n,n*n))
        .toDF("number","sqrt")
        .write
        .mode(SaveMode.Overwrite)
        .save("D://work/path/flag=a")
      //创建第二个RDD
      sc.parallelize(List(4,5,6,9,6))
        .map(n=>(n,n*n*n))
        .toDF("number","cube")
        .write
        .mode(SaveMode.Overwrite)
        .save("D://work/path/flag=b")

      val resDF=spark.read.option("mergeSchema","true")load("D://work/path")
      resDF.show()
    }

9.读取hive数据

sparkSQL可以读取hive仓库的数据
如果使用hive,必须在sparkSession中添加hive的支持
语法与hive的语法一致
warehouse和元数据库的三种形式
a.如果没有任何路径设置,在当前项目下创建数据仓库和derby元数据库
(如果你写了支持hive的sparkSession,就不要写在写一个其他的,会报错)

val spark_hive=SparkSession.builder().master("local[*]").
      appName("app2").
      enableHiveSupport().
      getOrCreate()
    hiveoptions(spark_hive)
    spark_hive.stop()

b.如果设置仓库路径,在当前项目下创建derby元数据库,
在指定路径下创建数据仓库
在主方法里加上.config(”spark.sql.warehouse.dir“,”path“)

val spark_hive=SparkSession.builder().master("local[*]").
      appName("app2").
      enableHiveSupport().
      config("spark.sql.warehouse.dir","D://work/path").
      getOrCreate()
    hiveoptions(spark_hive)

    spark_hive.stop()

c.如果有hive-site.xml文件,里面设置了相应元数据的连接信息,
可以读取指定元数据库和元数据库指向的数据仓库的数据

10.连接mysql数据库(JDBC)

读:
a.spark.read.format(“jdbc”).option(“url”,xxx)… .load()

b.spark.read.jdbc(url,dbtable,prop)
写:
a.df.write.format(“jdbc”).option(“url”,xxx)… .save()
b.df.write.jdbc(url,dbtable,prop)

 val reDF=spark.read.format("jdbc").
          option("url","jdbc:mysql://localhost:3306/hive")
          .option("dbtable","peoples")
          .option("user","root")
          .option("password","root")
          .load()

        val reDF1=reDF.createOrReplaceTempView("peo")
          val resDF=spark.sql("select * from peo where id in (1,2,3)")
          resDF.write.format("jdbc")
            .option("url","jdbc:mysql://localhost:3306/hive")
            .option("dbtable","people2")
            .option("user","root")
            .option("password","root")
            .mode(SaveMode.Overwrite)
            .save()


        //第二种方式读写mysql里的数
        val prop=new Properties()
        prop.setProperty("user","root")
        prop.setProperty("password","root")
        val reDF2=spark.read.jdbc("jdbc:mysql://localhost:3306/hive","peoples",prop)
        reDF2.createOrReplaceTempView("peo")
        val resDF1=spark.sql("select * from peo where id>3")
        resDF1.write.jdbc("jdbc:mysql://localhost:3306/hive","peoples1",prop)

标签:jdbc,option,val,hive,prop,SparkSql,spark
来源: https://blog.csdn.net/qq_51536995/article/details/120343653

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有