如何在 Hive 中将一列拆分为两列

Posted

技术标签:

【中文标题】如何在 Hive 中将一列拆分为两列【英文标题】:How to split one column into two in Hive 【发布时间】:2018-02-14 20:39:04 【问题描述】:

在我的 Hive 表中,我有一个名为 YearMonth 的列,其值类似于“Jul1998”。我需要将每一行中的字符串拆分为月份('Jul')和年份('1998),并将它们分别添加到 Hive 的新列中。不幸的是,我的代码没有正确执行,并在每隔一行添加一个 NULL 实例,如下所示:

我采取了以下步骤来获得上述输出:

创建了一个 split.py 文件将字符串 'Jul1998' 拆分为 'Jul' 和 '1998

#!/usr/bin/python
import sys

for line in sys.stdin:
    Month= line[:3]
    Year = line[3:]
    print '\t'.join([Month, Year])

然后我进入 Hive 并将 python 文件添加到 hive 目录中 最后,我使用 transform 函数将列拆分并创建了两个新列。

ADD FILE /home/ec2-user/split.py;
INSERT OVERWRITE TABLE data
SELECT TRANSFORM (yearmonth) USING 'split.py' AS (month,year) FROM data;

【问题讨论】:

你为什么不用SUBSTR?例如:SELECT SUBSTR(yearmonth,1,3) AS month, SUBSTR(yearmonth,4,3) AS year FROM data 【参考方案1】:

假设您的数据格式是一致的,您可以在 Hive 中简单地使用 regexp_extract 而无需 UDF。

SELECT regexp_extract(yearmonth,([^0-9]+)) as mth,regexp_extract(yearmonth,([0-9]+)) as yr
FROM data;

或者一个简单的SUBSTRING

select substring(yearmonth,1,3) as mth,substring(yearmonth,4) as yr
from data

【讨论】:

以上是关于如何在 Hive 中将一列拆分为两列的主要内容,如果未能解决你的问题,请参考以下文章

Excel如何把同一列的内容拆分为两列

如何将包含日期时间的 DataFrame 列拆分为两列:一列包含日期,另一列包含一天中的时间?

Excel如何把同一列的内容拆分为两列?

如何将EXCEL表格里一个单元格的数据拆分为两列

使用 r 将一列拆分为两列 [重复]

怎么用excel把一列变成两列