配置单元中python自定义项的“选择转换”解决方案

2hh7jdfx  于 2021-06-28  发布在  Hive
关注(0)|答案(0)|浏览(201)

有没有一种方法可以不在selecttransform()中包含所有列,而在输出中获取所有列?
例如:我在配置单元表中有如下列:

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;

问题是我不想传递selecttransform中的所有列,因为我的表中有近900列,很难确定udf在哪些列上工作。
例子:


# temp

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

现在我想从列中找到第一个非零值 c2, c3, c4 用c1列打印
这是python自定义项
测试.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

问题:我不想传递selecttransform中的所有列,因为我有900列。
基本上,我只想传递udf中涉及的那些列,而不是所有的列。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题