Hive与正则表达式SerDe分离每行成为一列的行

问题描述:

我想用正则表达式SerDe从文本文件创建配置单元表。我开始很简单,只是想将文本文档中的每个单词解析为一行。每行有一列,那就是这个词。Hive与正则表达式SerDe分离每行成为一列的行

我使用的正则表达式是([A-ZA-Z] +)

而这是以后我发出到配置单元创建表命令的一半,

行格式SERDE“的有机萃.apache.hadoop.hive.contrib.serde2.RegexSerDe'WITH SERDEPROPERTIES(“input.regex”=“([a-zA-Z] +)”,“output.format.string”=“%1 $ s”)保存为TEXTFILE;

当前表中几乎包含NULL。

任何帮助将是可怕的,谢谢!

+0

您提到该表包含几乎所有的NULL。你能否详细说明一下?有一些非NULL列吗?你能否提供你的数据的一个小样本? – 2012-04-26 03:50:50

当对输入进行反序列化时,RegExSerDe期望输入行与提供的正则表达式完全匹配。 如果不匹配,则该行中的所有列都将为NULL。

要分割输入中的所有单词,您需要采取不同的方法,首先将输入按原样加载到表中。 然后在输入上进行空格分割并将其分解,以便获得单个单词。您可能需要进行一些额外的匹配和过滤以删除不需要的交互字符。

CREATE TABLE input (text STRING); 
LOAD DATA LOCAL INPATH 'input.txt' INTO TABLE input; 
SELECT word FROM input LATERAL VIEW explode(split(text, ' ')) words AS word;