zoukankan      html  css  js  c++  java
  • Spark如何读写hive

    原文引自:http://blog.csdn.net/zongzhiyuan/article/details/78076842

    hive数据表建立可以在hive上建立,或者使用hiveContext.sql(“create table ....")

    1) 写入hive表

    [java] view plain copy
     
    1. case class Person(name:String,col1:Int,col2:String)  
    2. val sc = new org.apache.spark.SparkContext    
    3. val hiveContext = new org.apache.spark.sql.hive.HiveContext(sc)  
    4. import hiveContext.implicits._  
    5. hiveContext.sql("use DataBaseName")  
    6. val data = sc.textFile("path").map(x=>x.split("\s+")).map(x=>Person(x(0),x(1).toInt,x(2)))  
    7. data.toDF().insertInto("tableName")  

    2)写入hive分区中

    [java] view plain copy
     
    1. case class Person(name:String,col1:Int,col2:String)  
    2. val sc = new org.apache.spark.SparkContext    
    3. val hiveContext = new org.apache.spark.sql.hive.HiveContext(sc)  
    4. import hiveContext.implicits._  
    5. hiveContext.sql("use DataBaseName")  
    6. val data = sc.textFile("path").map(x=>x.split("\s+")).map(x=>Person(x(0),x(1).toInt,x(2)))  
    7. data.toDF().registerTempTable("table1")  
    8. hiveContext.sql("insert into table2 partition(date='2015-04-02') select name,col1,col2 from table1")  


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

    3)优化

    将文件存为符合hive table文件的格式,然后使用hive load将产生的结果文件直接move到指定目录下。代码如下:

    [java] view plain copy
     
    1. result.rdd.map { r => r.mkString("01") }.repartition(partitions).saveAsTextFile(output_tmp_dir)  
    2. sql(s"""load data inpath '$output_tmp_dir' overwrite into table $output partition (dt='$dt')""")  

    hive column默认分隔符在scala/java中的表示为“/001”,r.mkString("/001")既是将column以分隔符/001进行分割,hive在导入时会自动识别。
    使用hive load data命令,将hdfs文件load到hive表中。后台操作为直接将目录下的文件移到hive table所在目录,所以只是hdfs move数据的过程,执行非常快。

    需要注意的是,此处要求hive建表时,以textfile格式建表。

    参考:

    http://blog.csdn.net/zgc625238677/article/details/53928320

    如果是命令行操作,可以参考http://blog.csdn.net/fansy1990/article/details/53401102

    《如何解决spark写hive慢的问题》http://blog.csdn.net/lulynn/article/details/51543567

  • 相关阅读:
    测开之路九十五:css进阶之光标和溢出内容处理
    测开之路九十四:css之盒子模型
    测开之路九十三:css之文字样式和段落对齐
    测开之路九十二:css之背景色和背景
    测开之路九十一:css常用的选择器
    测开之路九十:css的引用方式
    测开之路八十九:HTML之图片处理
    测开之路八十八:HTML之文本格式化
    测开之路八十七:HTML之a标签的用法
    十、Django之Admin
  • 原文地址:https://www.cnblogs.com/jinggangshan/p/8086674.html
Copyright © 2011-2022 走看看