【发布时间】:2023-03-08 01:05:01
【问题描述】:
我遇到了一个有趣的问题。我有一个调用 Python UDF 的 HIVE 脚本来操作一些日期。 Python 的输出是 6 列,3 列是字符串,3 列是数组。
例如print '%s\t%s\t%s\t%s\t%s\t%s\t%s' % (ID1, ID2, ID3, ARR1, ARR2, ARR3)
这是我的 python UDF 输出中的一行:
10161 10400511433810000 (0000010161, 10400511433810001) ["0011583180","0011583180","0011583180"] ['2004-04-16', '2004-04-16', '2004-04-16'] ['2004-09-03', '2004-09-03', '2004-09-03']
#
问题1:
我正在使用%s,因为我无法找到一种方法将数组返回给 HIVE,而 HIVE 会将它们作为数组读取。
所以我在 HIVE 中创建了一个表,它甚至将数组作为字符串导入,假设我能够将字符串拆分为一个数组。我使用的脚本:
insert overwrite table table2
SELECT
ID1,
ID2,
ID3,
SPLIT(ARR1, '\\\t') as ARR1,
SPLIT(ARR2, '\\\t') as ARR2,
SPLIT(ARR3, '\\\t') as ARR3
FROM table1
LIMIT 10;
# 问题2:我得到以下输出:
0000010167 10400514362740001 (0000010167, 10400514362740001) ["[\"0022136941\",\"0022315161\"]"] ["['1900-01-01', '2007-05-01']"] ["['1900-01-01', '2008-06-16']"]
我真正需要的是:
0000010167 10400514362740001 (0000010167, 10400514362740001) 0022136941 1900-01-01 1900-01-01
0000010167 10400514362740001 (0000010167, 10400514362740001) 0022315161 2007-05-01 2008-06-16
【问题讨论】:
标签: python hadoop split hive user-defined-functions