加载错误配置单元的其他记录之间的字符串列表

0yycz8jy  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(405)

我被一个问题困住了,真的需要帮助。
下面是我的数据集

"counter","qid","i","qs","qt","tags","qvc","qac","aid","j","as","at"
"1",563355,62701,0,1235000081,"php,error,gd,image-processing",220,2,563372,67183,2,1235000501
"2",563356,15842,10,1235000140,"lisp,scheme,clojure",1047,16,563358,15842,3,1235000177

所有列都用“,”分隔,第六列是tags,这是一个由2到5个标记组成的列表,也用“,”分隔。我试图创建一个表,将标记作为一个字符串,也作为一个字符串数组,这两个表都给出了标记列表中的第一个值(在本例中) php 以及 lisp )其余列为空。

"1" 563355  62701   0   1235000081  "php    NULL    NULL    NULL    220 2   563372
"2" 563356  15842   10  1235000140  "lisp   NULL    NULL    NULL    1047    16  563358

期望输出:

"1" 563355  62701   0   1235000081  "php,error,gd,image-processing" 220 2   563372
"2" 563356  15842   10  1235000140  "lisp,scheme,clojure"   1047    16  563358

我做了一些研究,发现我可以写一个regexserde模式来读取数据,我是新来的,我不知道如何写regex模式。除了正则表达式还有别的方法吗。如果没有,有人能帮我写一个正则表达式模式吗?
先谢谢你。

osh3o9ms

osh3o9ms1#

最简单的方法是将“,”分隔符与其他内容一起更改
另一种方法是使用opencsv-serde,这将帮助您做到这一点

ttygqcqt

ttygqcqt2#

可以使用配置单元外部表

create external table try3.tablename(
counter string,
qid int,
i int,
qs int,
qt int,
tags string,
qac int,
aid int )
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
  'input.regex' = '(.*?),(.*?),(.*?),(.*?),(.*?),(\".*\"),(.*?),(.*?),.*'
)
STORED AS TEXTFILE
LOCATION '/somelocation'

相关问题