当前位置: 首页 > 知识库问答 >
问题:

配置单元-处理Python UDF中的空输入值

太叔岳
2023-03-14

在python中编写hiveUDFs时,如何处理null输入值?。

重现错误的示例设置:

配置单元表:

CREATE external table udfTest(
fname STRING,
age INT
) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LOCATION '<location>';

输入txt:

abc    1
efg    2
       3 //missing fname
hij      //missing age
LOAD DATA INPATH '/tmp/input.txt' INTO TABLE udfTest;
import sys
import datetime
for line in sys.stdin:
        fname, age = line.strip('\n').split('\t')
        fname = fname.upper() if (fname is not None and fname != '') else 'dummy'
        age = int(age) if (age is not None and age.strip() != 'NULL') else -1
        print '\t'.join(map(str, [fname, age]))
add FILE /tmp/example.py
SELECT TRANSFORM(fname, age) USING 'python /tmp/example.py' AS (fname, age) FROM udfTest;

失败次数最多的任务(4):-----任务ID:task_1560326504017_73073_m_000000

URL:

----此任务的诊断消息:错误:java.lang.RuntimeException:关闭org.apache.hadoop.Hive.ql.exec.mr.execmapper.close(execmapper.java:217)(org.apache.hadoop.mapred.maprunner.run(maprunner.java:61)(org.apache.hadoop.mapred.maptask.runoldmapper(html" target="_blank">maptask.java:459)(org.apache.hadoop.mapred.maptask.run(maptask.java:343)(org.apache.hadoop.mapred.yarnchild$2.run(yarnchild.java:164)(java.security.AccessController.DoPrivileged(本机方法)(javax.security.auth.subject.doas(subject.java:422)(org.apache.hadoop.security.usergroupinformation.doas(usergroupinformation.java:1924)(org.apache.hadoop.mapred.yarnchild.main(yarnchild.java:158))(原因:org.apache.hadoop.Hive.ql.metadata.hiveException:[错误20003]:尝试关闭运行自定义脚本的运算符时出错。在org.apache.hadoop.hive.ql.exec.scriptoperator.close(scriptoperator.java:572)在org.apache.hadoop.hive.ql.exec.operator.close(operator.java:610)在org.apache.hadoop.hive.ql.exec.operator.close(operator.java:610)在org.apache.hadoop.hive.ql.exec.operator.close(operator.java:610)在org.apache.hadoop.hive.ql.exec.operator.close(operator.java:610)在

失败:执行错误,从org.apache.hadoop.hive.ql.exec.mr.MapredTask返回代码20003。尝试关闭运行自定义脚本的运算符时出错。

编辑:

select * from udfTest;
abc    1
efg    2
       3
hij    NULL

共有1个答案

谢豪
2023-03-14

“默认情况下,在输入用户脚本之前,列将被转换为STRING并用TAB分隔;类似地,所有空值都将被转换为文字字符串\n以便将空值与空字符串区分开来。”这里有更多细节。因此,您需要检查您的列是否为'\n'

 类似资料:
  • 先来看一个表单递交的例子,我们有如下的表单内容,命名成文件login.gtpl(放入当前新建项目的目录里面) <html> <head> <title></title> </head> <body> <form action="/login" method="post"> 用户名:<input type="text" name="username"> 密码:<input type=

  • 我需要将记录流插入到配置单元分区表中。表结构类似于 我想了解一下Hive是如何处理内部表中的插入的。 是否将所有记录插入到yyyy_mm_dd=2018_08_31目录中的单个文件中?或者配置单元在一个分区内拆分为多个文件,如果是,什么时候拆? 如果每天有100万条记录,并且查询模式介于日期范围之间,那么下面哪一条性能好? 内部表中没有分区 按日期分区,每个日期只有一个文件 按日期分区,每个日期有

  • 问题内容: 您将如何配置SWIG .i文件以处理C FILE *类型?下面的函数设置一个文件,以便可以将日志输出写入该文件。我需要从Java类中调用。当前,当我仅将C头文件包含在以下函数中时,SWIG将生成公共静态void setLogFile(SWIGTYPE_p_FILE fd)函数。有任何想法吗? C函数: 我尝试使用以下方法#1并得到以下异常: test.i: 例外: 问题答案: 给定的看

  • libgdx.我不想有一个演员在舞台上得到触摸输入。在将stage添加到代码之前使其工作。 :

  • 正如我所知,hive支持sql就像Multi-Select中的一个一样,我的sql是这样的: 我尝试一个查询多选择,但配置单元返回异常:“编译语句时出错:failed:SemanticException Exception在处理时异常” 有人知道为什么会这样吗?如何解决?谢谢,高尔。

  • 当我运行一个Hive语句并启动相应的MR作业时,它通常有如下一行: 数字1280804751,279261996966是什么单位?字节?街区?有没有办法将它们转换为人类可读的格式? “花费的MapReduce CPU总时间”是什么意思?“累计CPU”是什么意思?