Hive:Spark中如何实现将rdd结果插入到hive1.3.1表中

  • DataFrame写入hive API:
  1. registerTempTable函数是创建spark临时表
  2. insertInto函数是向表中写入数据,可以看出此函数不能指定数据库和分区等信息,不可以直接进行写入。
  3. 向hive数据仓库写入数据必须指定数据库,hive数据表建立可以在hive上建立,或者使用hiveContext.sql(“create table ....")
case class Person(name:String,col1:Int,col2:String)

def main(args:Array[String]){
    val sc = new org.apache.spark.SparkContext
    val hiveContext = new org.apache.spark.sql.hive.HiveContext(sc)
    import hiveContext.implicits._
    hiveContext.sql("use DataBaseName")
    val data = sc.textFile("path").map(x=>x.split("\\s+")).map(x=>Person(x(0),x(1).toInt,x(2)))
    data.toDF()insertInto("tableName")
}

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

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

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

case class Person(name:String,col1:Int,col2:String)
def main(args:Array[String]):Unit={
    val sc = new org.apache.spark.SparkContext
    val hiveContext = new org.apache.spark.sql.hive.HiveContext(sc)
    import hiveContext.implicits._
    hiveContext.sql("use DataBaseName")
    val data = sc.textFile("path").map(x=>x.split("\\s+")).map(x=>Person(x(0),x(1).toInt,x(2)))
    data.toDF().registerTempTable("table1")
    hiveContext.sql("insert into table2 partition(date=‘2015-04-02‘) select name,col1,col2 from table1")
}

声明本文转自:http://www.aboutyun.com/thread-12392-1-1.html

时间: 2024-10-18 09:20:37

Hive:Spark中如何实现将rdd结果插入到hive1.3.1表中的相关文章

mysql insert插入时实现如果数据表中主键重复则更新,没有重复则插入的四种方法

[CSDN下载] Powerdesigner 设计主键code不能重复等问题 [CSDN博客] Oracle中用一个序列给两个表创建主键自增功能的后果 [CSDN博客] MySQL自增主键删除后重复问题 [CSDN博客] mysql 主从复制 双主从复制原理 防止主键重复问题(必看) [CSDN博客] replace into导致mysql自增列导致主键重复问题分析 [CSDN博客] 一个循环更新某库所有表所有非主键列的值方法(sql 2005 & mysql) [CSDN博客] mysql i

用SqlBulkCopy批量插入数据到SqlServer数据库表中

首先创建一个数据库连接类:SQLHelper using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data.SqlClient; using System.Data; namespace insetData { public class SQLHelper { public static readonly string Strconn = "Data

使用SqlBulkCopy批量插入多条数据进入表中

由于工作中项目需求结算一次生成一批相同批次号的数据插入一个表中,然后再通过另一页面展示出来,所以需要用到一次性插入一批数据,所以就采用了SqlBulkCopy插入一批数据 1 public static int InsertSettlementRecord(SqlConnection connection, List<InventorySettlement> model) 2 { 3 DataTable dt = GetTableSchema(); 4 SqlBulkCopy bulkCopy

mysql把查询到不一样的记录插入到另一张表中

我们将一个表中的数据插入到另一个表中的时候可以这么写: INSERT INTO 目标表 (字段1, 字段2, ...) SELECT 字段1, 字段2, ... FROM 来源表 WHERE not exists (select * from 目标表 where 目标表.比较字段 = 来源表.比较字段);

VC++ MFC中如何将应用程序的配置信息保存到注册表中(一)

注册表(Registry,繁体中文版Windows称之为登录档)是Microsoft Windows中的一个重要的数据库,用于存储系统和应用程序的设置信息.比如我们打开一个记事本,调整其窗口大小,使用完毕后关闭记事本,下次打开时大小和上次关闭前的大小和在屏幕上的位置是相同.这些位置和大小信息就是在记事本关闭时保存到注册表中,下次打开时我们从注册表中取出这些数据,并按照这些数据显示记事本程序的大小和位置信息. 下面教你如何使用GetProfileInt,WriteProfileInt,GetPro

Oracle中把一张表查询结果插入到另一张表中

一.Oracle数据库中,把一张表的查询结果直接生成并导入一张新表中.  例如:现有只有A表,查询A表,并且把结果导入B表中.使用如下SQL语句: Sql代码  create table B as select * from A    二.Oracle数据库中支持把查询结果导入到另外一张表中.  例如:有两个表A和B 1)如果两个表的表结构是否相同,但要插入的字段类型相同:  (1)把A表的全部字段数据插入到B表中: Sql代码  insert into B select * from A;  

存储过程查找表中的内容去匹配另一张表中对应的数据,将该表查找到的数据插入到另一张表中

USE [数据库]GO SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE proc [dbo].[表名]as begin declare @Keyword varchar(max),@strs varchar(max) --申明游标 declare MTF_Cursor CURSOR FOR select distinct Keyword from Keywords where Flag=4 --打开游标 open MTF_Cursor fe

在oracle中怎么把一张表的数据插入到另一张表中

把table2表的数据插入到table1中 insert   into   table1   select   *   from   table2

java实现将xml数据插入到oracle数据库的表中

1.DbUtil package xml2table; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; public class DbUtil { /* * 功能:编写一个静态方法用于与数据库建立连接 输入参数:无 返回值:数据库连接对象 */ public static Connection ge