如何将Postgress“Text”数据类型加载到HIVE中

时间:2016-02-20 06:27:45

标签: hadoop apache-spark hive

我有一个postgress表,其中包含文本列( detail )。我已在Hive中将 detail 声明为STRING。当我尝试从SQOOP或SPark导入它时,它已成功导入。但是我遗漏了许多详细列中的数据,并且在hive表中创建了很多空行。

有人可以帮我吗?

Ex:详细信息列具有以下数据

  

line1 sdhfdsf dsfdsdfdsf dsfs
   line2 jbdfv df ffdkjbfd
  jbdsjbfds   dsfsdfb dsfds
  dfds dsfdsfds dsfdsdskjnfds   
sdjfbdsfdsdsfds

只有“ line1 sdhfdsf dsfdsdfdsf dsfs ”才会导入hive表。

我可以看到剩余行的空行。

2 个答案:

答案 0 :(得分:1)

Hive不支持文本文件格式的多行。您必须将此数据加载到二进制文件Avro或Parquet中,以保留换行符。如果您不需要保留它们,那么您可以使用hive-drop-import-delims剥离它们

答案 1 :(得分:0)

这是解决方案

 SparkConf sparkConf = new SparkConf().setAppName("HiveSparkSQL");
    SparkContext sc = new SparkContext(sparkConf);

    HiveContext sqlContext= new HiveContext(sc);
    sqlContext.setConf("spark.sql.parquet.binaryAsString","true");

    String url="jdbc:postgresql://host:5432/dbname?user=**&password=***";

    Map<String, String> options = new HashMap<String, String>();
    options.put("url", url);
    options.put("dbtable", "(select * from abc.table limit 50) as act1");
    options.put("driver", "org.postgresql.Driver");

    DataFrame jdbcDF  = sqlContext.read().format("jdbc").options(options).load(); 
    jdbcDF.write().format("parquet").mode(SaveMode.Append).saveAsTable("act_parquet");