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

Posted

技术标签:

【中文标题】Hive with Regex SerDe 拆分行,每个单词成为一列【英文标题】:Hive with Regex SerDe Split up line with each word becoming a column 【发布时间】:2012-04-25 01:22:08 【问题描述】:

我正在尝试使用正则表达式 SerDe 从文本文件创建配置单元表。我开始很容易,只想将文本文档中的每个单词解析成一行。每行有一列,就是这个词。

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

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

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

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

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

【问题讨论】:

您提到该表几乎包含所有 NULL。你能详细说明一下吗?是否有一些非 NULL 列?您能否提供一小部分数据样本? 【参考方案1】:

在反序列化输入时,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;

【讨论】:

以上是关于Hive with Regex SerDe 拆分行,每个单词成为一列的主要内容,如果未能解决你的问题,请参考以下文章

行格式 serde 是创建 Hive 表时要使用的强制参数吗

HIVE Row Formats和SerDe

Spark-SQL 是不是支持使用 regex 规范的 Hive Select All Query with except Columns

Hive 如何存储数据,啥是 SerDe?

无法验证 serde:org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDe

Hive之SerDe&Beeline