Hive with Regex SerDe拆分行,每个单词成为一列

时间:2012-04-25 01:22:08

标签: regex hadoop hive

我正在尝试使用正则表达式SerDe从文本文件创建一个hive表。我开始很简单,只想将文本文档中的每个单词解析成一行。每行都有一列,即单词。

我使用的正则表达式是([a-zA-z] +)

这是我发给hive的create table命令的后半部分,

行格式SERDE'org.apache.hadoop.hive.contrib.serde2.RegexSerDe'WITH SERDEPROPERTIES(“input.regex”=“([a-zA-Z] +)”,“output.format.string” =“%1 $ s”)存储为文本文件;

目前该表几乎包含所有NULL。

任何帮助都会很棒,谢谢!

1 个答案:

答案 0 :(得分:0)

当反序列化输入时,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;
相关问题