我的csv文件中的某些标题/发布商有"& amp&#34 ;;在它们中以及包含它们的行被误读,因为它们在&符号和分区末尾的分号上过早地被分割。
如何修改此代码:
CREATE TABLE books (ISBN STRING, Title STRING, Author STRING, Year STRING, Publisher STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY "\;";
LOAD DATA INPATH '/path/to/my/datafile' INTO TABLE books;
所以它没有这样做?
我的csv文件中有问题的行示例如下:
0743403843;"Decipher";"Stel Pavlou";"2002";"Simon & Schuster (Trade Division)"
发布商专栏无法正确阅读。
我知道我可以在移除(& amp)之前对csv进行sanatize;但是可以告诉我如何在Hive或Hadoop的其他工具中做到这一点?
答案 0 :(得分:0)
此帖子讨论了使用CSV时出现的类似问题和解决方案,引用的字符串包含逗号:http://dev.bizo.com/2010/11/csv-and-hive.html
看起来他们链接到的CSV-Serde可以配置为备用分隔符,因此它也适用于您的格式。
答案 1 :(得分:0)
你能试试吗?
hive> CREATE TABLE test_regex(
> isbn STRING,
> title STRING,
> author STRING,
> year STRING,
> publisher STRING) ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe'
> WITH SERDEPROPERTIES ("input.regex" =
> "(.*)\;\"(.*)\"\;\"(.*)\"\;\"(.*)\"\;\"(.*)\"",
> "output.format.string" = "%1$s %2$s %3$s %4$s %5s")
> STORED AS TEXTFILE;
OK
Time taken: 4.139 seconds
hive> load data local inpath 'input.csv' overwrite into table test_regex;
OK
Time taken: 0.393 seconds
hive> select isbn,publisher from test_regex;
ISBN Publisher
0002005018 HarperFlamingo Canada
0399135782 Putnam Pub Group
0743403843 Simon & Schuster (Trade Division)
Time taken: 4.522 seconds
hive> select *from test_regex;
OK
ISBN Title Author Year Publisher
0002005018 Clara Callan Richard Bruce Wright 2001 HarperFlamingo Canada
0399135782 The Kitchen God's Wife Amy Tan 1991 Putnam Pub Group
0743403843 Decipher Stel Pavlou 2002 Simon & Schuster (Trade Division)
Time taken: 0.253 seconds