在spark中将数据插入到hive、parquet表中及用户定义函数

在spark中将数据插入到hive表

      步骤:

            1. 创建数据集的sparkdataFrame

                这里使用的是TmpDF = spark.createDataFrame(RDD, schema)这种方法创建的

            2. 将数据集的dataFrame格式映射到临时表

                使用createOrReplaceTempView来创建,这个函数在SQLcontext中

            3. 用spark SQL 语句将临时表的数据导入hive的tmp_table表中

                如下:

                    spark.sql("insert into table student2 select * fromtmpV")

我们先来使用spark.sql来看下我们的数据库

       我先在Linux中打开hive,查看下该数据仓库中的数据库,发现我们查询的和我们在jupyter中使用spark.sql查询到的内容一样,所以我们在jupyter中创建的数据库和表都是直接作用在hive中的。

                                 

       选择stduent数据库,并在该数据库中创建一个student2表,并定义其字段及类型,还标明了可以导入文件并以逗号为分隔符分隔开。

      我在第二行写了这句spark.sql("desc formattedtb_student").show(),查看了一下该表的结构及详细信息,可以看到该表的字段及location,location后面标注了该表的地址,其映射的是我们的Linux中的hive数据集仓库


       为了得到更准确的答案,我在hive中查看了一下stduent数据库,并查看了一下该数据库中的表,发现了我们在jupyter中创建的student2表

              

  因为创建的表是空的,所以我来导入一下本地文件并查询其内容

       我先导入from pyspark.sql.types import *,以便下面在定义类型的时候可以进行转换,我自己定义了一个dataFrame类型的df,并将df格式映射到临时表tmpV中,这里和我们之前使用是sparkSQL一样,我们要想使用sql语句来查询表数据的话就必须将一个dataFrame注册成一个临时表。

这里创建的临时表tmpV可以使用spark.sql来查询其中的数据,我们在第一个表中可以看到。

接着我将查询到的tmpV中的内容插入到student2表中去了,再来查看一下student2中的内容,发现和我们预想的一样,这里就成功的把我们的数据插入到hive表中了




在spark中将数据插入到parquet表

      首先先创建一个parquet类型的表name_age2

      接着定义一个变量strsql,把我们要创建表的SQL语句赋值给该变量,

      我们将我们创建好的表查询一下,发现并没有数据,但有我们创建字段


         接着我们来插入一下数据,这里的数据是由student2表中查询而来的


        当然,我们也可将student2表注册成一个临时表(将数据集的DataFrame格式映射到临时表)这个操作和上面那个操作是分开的,这里默认name_age2表中没有数据


          

                

           接着来查询一下name_age2表中的数据,和前面那种方法得出的结果一致

            


案列

   来看下这个案列,就是根据一些条件来进行查询



定义用户函数

     如果我们想对一些字段进行修改的话,可以自定义一个函数来进行修改,这里要注意两点;

            1. from pyspark.sqlimport functions as F

                导入pyspark.sql 模块中的functions,并给它取个别名为F

            2. 使用registerFunction来将我们定义的函数进行注册,这样就可以在dataFrame SQL中使用这个函数






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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值