我怎么能忽略分号;在&中;从.csv文件创建配置单元表时

zy1mlcev  于 2021-05-30  发布在  Hadoop
关注(0)|答案(2)|浏览(584)

在这个问题的继续中,我如何从一个.csv文件中创建一个配置单元表,该文件有一列,字段用分号表示;
我的csv文件中的某些标题/发布者有“&amp”;在它们中以及包含它们的行被误读,因为它们在符号和代码中的分号和每个字段的末尾被过早地拆分。
如何修改此代码:

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)"

publisher列未正确阅读。
我知道我可以在手动删除&之前对csv进行sanatize;但是你能告诉我如何在hive或者hadoop的另一个工具中做到这一点吗?

vlju58qv

vlju58qv1#

你能试试这个吗?

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
w6mmgewl

w6mmgewl2#

这篇文章讨论了在使用csv和带引号的字符串包含逗号时的类似问题和解决方案:http://dev.bizo.com/2010/11/csv-and-hive.html
看起来他们链接到的csv serde可以配置为备用分隔符,所以它也应该适用于您的格式。

相关问题