您的位置:首页 > 其它

spark 将dataframe数据写入Hive分区表

2016-12-29 15:15 477 查看
从spark1.2 到spark1.3,spark SQL中的SchemaRDD变为了DataFrame,DataFrame相对于SchemaRDD有了较大改变,同时提供了更多好用且方便的API。

DataFrame将数据写入hive中时,默认的是hive默认数据库,insertInto没有指定数据库的参数,本文使用了下面方式将数据写入hive表或者hive表的分区中,仅供参考。

1、将DataFrame数据写入到Hive表中

从DataFrame类中可以看到与hive表有关的写入Api有以下几个:

registerTempTable(tableName: String): Unit,

insertInto(tableName: String): Unit

insertInto(tableName: String, overwrite: Boolean): Unit

saveAsTable(tableName: String, source: String, mode: SaveMode, options: Map[String, String]): Unit

有很多重载函数,不一一列举

registerTempTable函数是创建spark临时表

insertInto函数是向表中写入数据,可以看出此函数不能指定数据库和分区等信息,不可以直接进行写入。

向hive数据仓库写入数据必须指定数据库,hive数据表建立可以在hive上建立,或者使用hiveContext.sql(“create table ....")

下面语句是向指定数据库数据表中写入数据:

创建一个case类将RDD中数据类型转为case类类型,然后通过toDF转换为DataFrame,调用insertInto函数时,首先指定数据库,使用的是hiveContext.sql("use DataBaseName")语句,就可以将DataFrame数据写入hive数据表中了

2、将DataFrame数据写入hive指定数据表的分区中

hive数据表建立可以在hive上建立,或者使用hiveContext.sql(“create table ...."),使用saveAsTable时数据存储格式有限,默认格式为parquet,可以指定为json,如果有其他格式指定,尽量使用语句来建立hive表。

将数据写入分区表的思路是:首先将DataFrame数据写入临时表,之后是由hiveContext.sql语句将数据写入hive分区表中。具体操作如下:

使用以上方式就可以将dataframe数据写入hive分区表了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spark