Jur*_*raj 4 hadoop hive opencsv
我尝试从保存到 HDFS 的 CSV 文件创建表。问题是 csv在引号内包含换行符。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
"
Run Code Online (Sandbox Code Playgroud)
我创建了蜂巢表:
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');
Run Code Online (Sandbox Code Playgroud)
然后我尝试计算行数(正确的结果应该是 1)
Select count(*) from hive_database.hive_table;
Run Code Online (Sandbox Code Playgroud)
但结果是 4 what 是不正确的。你知道如何解决它吗?谢谢大家。
现在无法直接在 hive 中处理多行 csv 。但是,有一些解决方法:
生成一个带有\n或\r\n替换为您自己的换行标记的 csv,例如<\br>. 您将能够在 hive 中加载它。然后通过将后者替换为前者来转换结果文本
使用 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")
Run Code Online (Sandbox Code Playgroud)使用其他格式,例如 parquet、avro、orc、序列文件,而不是 csv。例如,您可以使用 sqoop 从 jdbc 数据库生成它们。或者你可以用 java 或 python 编写自己的程序。
| 归档时间: |
|
| 查看次数: |
6815 次 |
| 最近记录: |