在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来看下我们的数据库

在spark中将数据插入到hive、parquet表中及用户定义函数_第1张图片

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

                                 在spark中将数据插入到hive、parquet表中及用户定义函数_第2张图片

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

在spark中将数据插入到hive、parquet表中及用户定义函数_第3张图片

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

在spark中将数据插入到hive、parquet表中及用户定义函数_第4张图片

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

              在spark中将数据插入到hive、parquet表中及用户定义函数_第5张图片

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

在spark中将数据插入到hive、parquet表中及用户定义函数_第6张图片

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

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

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

在spark中将数据插入到hive、parquet表中及用户定义函数_第7张图片
在spark中将数据插入到hive、parquet表中及用户定义函数_第8张图片


在spark中将数据插入到parquet表

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

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

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

在spark中将数据插入到hive、parquet表中及用户定义函数_第9张图片

在spark中将数据插入到hive、parquet表中及用户定义函数_第10张图片

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

在spark中将数据插入到hive、parquet表中及用户定义函数_第11张图片

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


          在spark中将数据插入到hive、parquet表中及用户定义函数_第12张图片

                在spark中将数据插入到hive、parquet表中及用户定义函数_第13张图片

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

            在spark中将数据插入到hive、parquet表中及用户定义函数_第14张图片


案列

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

在spark中将数据插入到hive、parquet表中及用户定义函数_第15张图片


定义用户函数

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

            1. from pyspark.sqlimport functions as F

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

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

在spark中将数据插入到hive、parquet表中及用户定义函数_第16张图片

在spark中将数据插入到hive、parquet表中及用户定义函数_第17张图片




你可能感兴趣的:(Hive)