gpt4 book ai didi

hadoop - 使用 Hive 将由双引号和逗号分隔的 CSV 文件导入 Hbase

转载 作者:可可西里 更新时间:2023-11-01 14:38:58 26 4
gpt4 key购买 nike

我有一个用双引号和逗号分隔的 CSV 文件。它看起来有点像下面这样:

"Text from vendor ","Vendor Name, Inc."," blah blah ","Next string","", 1234

我正在尝试使用 Hive 将其导入到 Hbase 中的表中。

我可以使用类似下面的内容在 Hbase 中从 Hive 创建一个表:

hive> CREATE TABLE exampletable1(tax_numb int, tax_name string, tax_addr string, tax_city string, tax_stat string) 
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,cf:tax_name,cf:tax_addr,cf:tax_city,cf:tax_stat")
TBLPROPERTIES ("hbase.table.name" = "hiveexampletable1");

我还能够使用如下命令向导入 CSV 文件的 Hive 添加一个表(尽管双引号有问题):

hive> create table example2(tax_numb int, tax_name string, tax_addr string, tax_city string, tax_stat string) row format delimited fields terminated by ',' stored as textfile;

但是,我无法将“分隔字段”位集成到我在 Hbase 中创建外部表的命令中。

由于我对 Hive-Hbase 组合还比较陌生,所以在学习了很多教程之后,我认为最好向社区寻求帮助。我在谷歌上进行了多次搜索,但无济于事。

如有任何帮助/建议,我们将不胜感激。

最佳答案

我使用 org.apache.hadoop.hive.serde2.RegexSerDe 作为 serde 来解析这种文件。例如,如果我有一个包含 4 个字段的 csv,它们是整数、字符串、整数、字符串,我可以使用:

CREATE EXTERNAL TABLE mytable (
F1 BIGINT, F2 STRING,
F2 INT, F4 STRING
)
row format SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
with SERDEPROPERTIES ("input.regex" = "^\"([^\"]*)\",\"([^\"]*)\",\"([^\"]*)\",\"([^\"]*)\"$")
LOCATION "/somepath";

正则表达式 y 总是相同的,所以我用 python 生成它是这样的:

>>> r = "^" + ",".join(['"([^"]*)"' for i in xrange(0,4)]) + "$"
>>> print str(r).replace('"', '\\"')
^\"([^\"]*)\",\"([^\"]*)\",\"([^\"]*)\",\"([^\"]*)\"$

您好!

关于hadoop - 使用 Hive 将由双引号和逗号分隔的 CSV 文件导入 Hbase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15138181/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com