如何解决Hive TRANSFORM对于串联的数组值接收到NULL
我有一个蜂巢表,格式为:
:root {
--foo: #900;
--foo-rgb: 153,0;
--foo-dim: rgba(153,0.5);
--foo-dim: rgba(var(--foo-rgb),0.5);
}
.button {
background-color: var(--foo-dim);
}
col1 中的每个值可以在 col2 中具有多个值,而每对这样的(col1,col2)对可以具有多个 col3 。
我正在运行查询 [Q] :
member2(X,[X|_]).
member2(X,[_|T]) :- member2(X,T),X > T,write(X).
获得:
col1. col2. col3.
a1 b1 c1
a1 b1 c2
a1 b2 c2
a1 b2 c3
a2 b3 c1
a2 b4 c1
a2 b4 c2
a2 b4 c3
.
.
我想使用python UDF进行一些转换。因此,我使用TRANSFORM子句将所有这些列传递给UDF:
select col1,col2,collect_list(col3) from {table} group by col1,col2;
我正在使用concat_ws将数组输出从由分隔符连接的collect_list转换为strig。我得到的是col1,col2,但没有得到col3的输出。
a1 b1 [c1,c2]
a1 b2 [c2,c3]
a2 b3 [c1]
a2 b4 [c1,c2,c3]
在我的UDF中,我只有一条打印语句,用于打印从stdin接收到的行。
select TRANSFORM ( * ) using 'python udf.py' FROM
(
select col1,concat_ws('\t',collect_list(col3)) from {table} group by col1,col2;
)
有人可以帮我弄清楚为什么我的UDF中没有col3吗?
解决方法
首先,您需要在Python UDF中解析该行,例如
import sys
for line in sys.stdin:
try:
line = line.strip('\n')
col1,col2,col3 = line.split('\t')
print '\t'.join([col1,col3])
except Exception as e:
continue
然后最好在concat_ws中使用其他内容代替\t
select TRANSFORM ( * ) using 'python udf.py' as (col1,col3)
FROM
(
select col1,concat_ws(',',collect_list(col3)) from {table} group by col1,col2;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。