hive中python udf的“select transform”解决方案

时间:2017-01-23 06:30:28

标签: python hive udf hive-udf

有没有办法不在select transform()中包含所有列以获取输出中的所有列?

例如: 我在hive表中有列,如:

c1, c2, c3, c4, c5, c6, c7, c8, c9, c10

我正在对列c8, c9, c10执行转换,并且输出包含c1, c2, c3, c4, c5, c6, c7, co,其中co =在对列c8, c9, c10执行转换后输出

我有办法做到这一点:

select transform (c1,c2,c3,c4,c5,c6,c7,c8,c9,c10)
using 'python udf_name'
as (c1,c2,c3,c4,c5,c6,c7,co)
from table_name;

问题是我不想传递select变换中的所有列,因为我的表中有近900列,并且很难弄清楚UDF在哪些列上工作。

示例:

#temp
c1, c2, c3, c4  
 a,  1,  0, 5  
 b,   ,  8, 9  

现在我想从列c2, c3, c4中找到第一个非零非空值 并用列c1打印它

这是python UDF

test.py:

import sys
for line in sys.stdin:
    line=line.strip()
    c=line.split()
    l=len(c)
    for i in range (1,l):
        try:
            if (int(c[i])==0):
                pass
            else:
                print c[i]
                break
        except ValueError:
            pass

我可以通过传递所有列

来实现这一目标
select transform (c1,c2,c3,c4)
using 'python test.py'
as (c1,co)
from temp

输出:

c1, co  
 a,  1  
 b,  8  

问题: 我不想传递select变换中的所有列,因为我有900列。

基本上我只想传递UDF中涉及的那些列而不是所有列。

0 个答案:

没有答案