来自CSV的蜂巢表.行情终止



我尝试从CSV文件中创建表格,该表格保存到HDFS中。问题在于,报价中的CSV line Break 。CSV中的记录示例:

ID,PR_ID,SUMMARY
2063,1184,"This is problem field because consists line break
This is not new record but it is part of text of third column
"

我创建了蜂巢表:

CREATE TEMPORARY EXTERNAL TABLE  hive_database.hive_table
(   
    ID STRING,
    PR_ID STRING,
    SUMMARY STRING 
)
row format serde 'com.bizo.hive.serde.csv.CSVSerde'
with serdeproperties (
    "separatorChar" = ",",
    "quoteChar"     = """,
    "escapeChar"  = """
)     
stored as textfile
LOCATION '/path/to/hdfs/dir/csv'
tblproperties('skip.header.line.count'='1');

然后我尝试计算行(正确的结果应比1(

Select count(*) from hive_database.hive_table;

,结果是4是不正确的。您知道如何解决吗?谢谢大家。

现在有无法直接处理蜂窝直接中的多行csv。但是,有一些解决方法:

  1. nrn生产CSV,替换为您自己的Newline标记,例如<br>。您将能够将其加载到Hive中。然后通过以前的

  2. 替换后者来转换结果文本
  3. 使用Spark,它具有多元CSV读取器。这可以解决方案,而CSV蜂不以分布式方式读取。

    val df = spark.read
    .option("wholeFile", true)
    .option("multiline",true)
    .option("header", true)
    .option("inferSchema", "true")
    .option("dateFormat", "yyyy-MM-dd")
    .option("timestampFormat", "yyyy-MM-dd HH:mm:ss")
    .csv("test.csv")
    .write.format("orc")
    .saveAsTable("myschma.myTable")
    
  4. 使用其他格式,例如parquet,avro,orc,序列文件,而不是CSV。例如,您可以使用SQOOP从JDBC数据库中生产它们。或者您可以在Java或Python中编写自己的程序。

我找到了解决方案。您可以定义自己的输入图。然后,HQL表的DDL看起来像这样(首先您需要添加自定义JAR文件(:

ADD JAR /path/to/your/jar/CSVCustomInputFormat.jar;
DROP TABLE hive_database.hive_table;
CREATE EXTERNAL TABLE  hive_database.hive_table
(   
    ID STRING,
    PR_ID STRING,
    SUMMARY STRING 
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
   "separatorChar" = ",",
   "quoteChar"     = """,
   "escapeChar"    = "\"
) 
STORED AS 
INPUTFORMAT 'com.hql.custom.formatter.CSVCustomInputFormatt' 
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat' 
LOCATION '/path/to/hdfs/dir/csv'
tblproperties('skip.header.line.count'='1');

然后如何创建自定义输入格式化器,例如:https://analyticsanvil.wordpress.com/2016/03/06/creating-a-custom-custom-hive-input-format-format-and-and-and-and-record--读者到读者固定式式 - 弗拉特文件/

相关内容

  • 没有找到相关文章

最新更新