问题标签 [hive-udf]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
803 浏览

hive - 更新配置单元 UDF 的 jar

TL;DR:如何在 hive 中更新自定义 UDF 的 jar?

我写了自己的(通用)udf,效果很好。我可以定义一个新函数并将其与命令一起使用:

CREATE FUNCTION myfunc AS 'io.company.hive.udf.myfunc' USING JAR 'hdfs:///myudfs/myfunc.jar';

现在我想更新我的udf,因此我想在hdfs中放置一个更新版本的jar,同名。之后,发生的事情是:

  • 第一次调用该函数给出java.io.IOException: Previous writer likely failed to write hdfs://ip-10-0-10-xxx.eu-west-1.compute.internal:8020/tmp/hive/hive/_tez_session_dir/0de6055d-190d-41ee-9acb-c6b402969940/myfunc.jar Failing because I am unlikely to write too.
  • 第二个电话给org.apache.hadoop.hive.ql.metadata.HiveException: Default queue should always be returned.Hence we should not be here.

日志文件显示:

我已经尝试过的:

  • 将罐子添加到hive.reloadable.aux.jars.pathhive.aux.jar.path
  • list jar/delete jar/create function/reload 的不同组合无济于事。

我什至最终有一个查询显然开始正常,但然后就挂在那里,没有前进,日志中没有任何内容,没有创建 DAG。

我认为要求 tex 不重用当前会话可以解决问题,因为这样就可以在没有旧版本 jar 的情况下创建新会话。那会是一个选择吗?

0 投票
2 回答
6403 浏览

hive - 如何使用横向视图将分隔字符串拆分为 Hive 中的多行

我在 Hive 中有一张桌子,如下所示 -

该表有一个名为 Sellers 的列,它由插入语句中描述的字符分隔。我想将卖家分成多行,如下所示 -

我正在尝试lateral view explode()在 Hive 中使用函数但无法获得结果。我正在使用以下查询 -

这给了我以下结果作为输出 -

此结果不会('1--**--2--**--3',50)根据需要从表中拆分第 1 行,最终只生成 2 行而不是 3 行。

此任务是否需要任何其他功能?lateral view explode()仅适用于数组吗?

0 投票
0 回答
55 浏览

apache-spark - 每次调用函数都会实例化 Hive UDF 类

我创建了 One Hive UDF 类并在 spark 中注册了它的功能。在 spark session 对象内的 hive 查询中,我调用此函数。现在,当我运行我的代码时,我观察到每次调用它的函数都会创建 UDF 类的新实例。

如果创建新实例,每次调用都是正常行为吗?

是版本特定的问题吗?

0 投票
0 回答
301 浏览

sql - 为什么 Hive UDF 不能与“创建表为”查询一起使用

我编写了一个可以很好地与选择查询配合使用的 UDF。我已经用数据库'db1'永久注册了UDF,例如。select db1.myUDF(column name, arg) from table_name; 但是当我试图从中创建一个新表时,新表没有反映更改。我试过的查询是

创建表查询是否支持自定义 UDF ?

编辑:

myUDF 应该加密一个字符串。它确实加密,我可以在选择查询中看到。但不能在使用“create table as”查询创建的新表中。inbuild UDF 例如upper也可以正常工作。

names_perf 是从外部表创建的托管表 names_text_perf 是从外部 csv 创建的

0 投票
0 回答
47 浏览

java - Hive:为什么 CTAS 不能读取文件而选择查询可以

我已将文件放在/hadoop/yarn/local/usercache/root/test_abspath并想使用我的 UDF 读取第一行。当我使用它运行它时,select test('ABCD','ABCD');我可以读取该文件,但是当我尝试使用它时Create table as test_tb select test(name,'ABCD') from another_table它失败了。在第二种情况下f1.exist() was true,但f1.canRead() was false我尝试通过 chmod 777 更改读写权限,但没有成功。

读取文件的Java代码如下:

如果select test('ABCD','ACBD')它成功读取 test_file 的第一行,Create table as test_tb select test(name,'ABCD') from another_table则返回can't read字符串。

编辑:如果这是关于添加 serde.jar 那么请重定向我以正确下载 jar。HDP 沙盒版本 2.6.5

0 投票
1 回答
393 浏览

python - ImportError Python Hive UDF

我想将一些常量放在一个 Python 文件中并将其导入另一个文件。我创建了两个文件,一个带有常量,一个导入它,并且一切都在本地运行良好:

常量.py

test_constants.py

本地测试

使用 Hive (beeline) 进行测试

日志如下所示:

两个文件似乎都在同一个文件夹中,因此导入似乎应该可以工作,但事实并非如此。

添加于 2018 年 10 月 30 日:

@serge_k 的答案有效,但是,我最初遇到了麻烦,因为我拥有 Python UDF 的路径最初不适用于 hive。将所有文件移至/tmpHDFS 后,一切都按预期工作。

0 投票
1 回答
120 浏览

hive - Hive UDF 返回多列输出

如何创建一个接受 String 返回多个 Strings 的 UDF?到目前为止我看到的 UDF 只能给出一个输出。如何从 UDF 获取多个字段作为输出?

最简单的实现是 name -> FirstName, LastName。不是寻找拆分名称的替代解决方案,而是寻找有助于实现此类需求的 API / UDF。

让我们说名称Splitteris my UDF

从 myTable 中选择 age,nameSplitter(name) 作为 firstName,LastName;

输入

输出

0 投票
1 回答
73 浏览

python - 使用 Pandas 抛出错误在 Python 中编写 UDF

我们正在尝试用 Python 编写 Hive 的 UDF 来清理数据。我们尝试的 UDF 使用的是 Pandas,它正在抛出错误。

当我们尝试在没有 Pandas 的情况下使用另一个 python 代码时,它工作正常。请帮助理解问题。在下面提供 Pandas 代码:

我们已经尝试了 Pandas 的各种方式,但不幸的是没有运气。由于其他没有 Pandas 的 Python 代码运行良好,我们很困惑为什么它会失败?

我收到此错误:

0 投票
1 回答
848 浏览

java - Hive UDF - evaluate() 方法中的错误

我创建了以下 Java 类,并在用它制作了一个 jar 后将其添加到 Hive

接下来,我创建了一个临时函数

但是当我跑步时

我收到以下错误

我尝试使用String而不是Text作为参数类型,evaluate()但得到了相同的结果。然后我也试过这个

并得到同样的错误。有人可以帮我解决这个问题吗?

0 投票
1 回答
755 浏览

hive - 在 INSERT INTO TABLE 子句中,UDF 失败

我创建了一个 UDF translateText(),它调用 API 来翻译给定的文本并在 select 子句中返回正确的结果,但是当我应用 INSERT INTO TABLE 时,如下所示:

查询失败,输出如下:

失败:执行错误,从 org.apache.hadoop.hive.ql.exec.tez.TezTask 返回代码 2。顶点失败,vertexName=Map 1,vertexId=vertex_1543885299280_8715_1_00,诊断=[任务失败,taskId=task_1543885299280_8715_1_00_000040,诊断=[TaskAttempt 0 失败,info=[容器容器_e14_15438885292800421 完成诊断集52928000427 ]],TaskAttempt 1 失败,info=[Container container_e14_1543885299280_8715_01_000043 已完成,诊断设置为 [Container completed。]],TaskAttempt 2 失败,info=[Container container_e14_1543885299280_8715_01_000087 已完成,诊断设置为 [Container completed。]],TaskAttempt 3 失败,info=[Container container_e14_1543885299280_8715_01_000137 已完成,诊断设置为 [Container completed。]]],由于 OWN_TASK_FAILURE,Vertex 没有成功,failedTasks:1killedTasks:40, Vertex vertex_1543885299280_8715_1_00 [Map 1] 由于:OWN_TASK_FAILURE]DAG 由于 VERTEX_FAILURE 而没有成功。failedVertices:1killVertices:019/02/12 06:54:58 [ATS Logger 0]:INFO hooks.ATSHook:收到了挂钩后通知:bduser_20190212065438_6cf35096-aa74-48d1-a8ae-6d76b0049099 19/02/12 06:54 :58 [main]:错误 ql.Driver:FAILED:执行错误,从 org.apache.hadoop.hive.ql.exec.tez.TezTask 返回代码 2。顶点失败,vertexName=Map 1,vertexId=vertex_1543885299280_8715_1_00,诊断=[任务失败,taskId=task_1543885299280_8715_1_00_000040,诊断=[TaskAttempt 0 失败,info=[容器容器_e14_15438885292800421 完成诊断集52928000427 ]],TaskAttempt 1 失败,info=[容器 container_e14_1543885299280_8715_01_000043 已完成,诊断设置为 [容器已完成。]],TaskAttempt 2 失败,info=[Container container_e14_1543885299280_8715_01_000087 已完成,诊断设置为 [Container completed。]],TaskAttempt 3 失败,info=[Container container_e14_1543885299280_8715_01_000137 已完成,诊断设置为 [Container completed。]]],由于 OWN_TASK_FAILURE,Vertex 没有成功,failedTasks:1killedTasks:40,Vertex vertex_1543885299280_8715_1_00 [Map 1] 由于:OWN_TASK_FAILURE 而被杀死/失败]DAG 由于 VERTEX_FAILURE 而没有成功。failedVertices:1killVertices:0 19/02/12 06:54:58 [ATS Logger 0]:DEBUG security.UserGroupInformation:PrivilegedAction as:bduser(auth:SIMPLE)来自:org.apache.hadoop.yarn.client.api。 impl.TimelineWriter.doPosting(TimelineWriter.java:112) info=[容器 container_e14_1543885299280_8715_01_000087 已完成,诊断设置为 [容器已完成。]],TaskAttempt 3 失败,info=[Container container_e14_1543885299280_8715_01_000137 已完成,诊断设置为 [Container completed。]]],由于 OWN_TASK_FAILURE,Vertex 没有成功,failedTasks:1killedTasks:40,Vertex vertex_1543885299280_8715_1_00 [Map 1] 由于:OWN_TASK_FAILURE 而被杀死/失败]DAG 由于 VERTEX_FAILURE 而没有成功。failedVertices:1killVertices:0 19/02/12 06:54:58 [ATS Logger 0]:DEBUG security.UserGroupInformation:PrivilegedAction as:bduser(auth:SIMPLE)来自:org.apache.hadoop.yarn.client.api。 impl.TimelineWriter.doPosting(TimelineWriter.java:112) info=[容器 container_e14_1543885299280_8715_01_000087 已完成,诊断设置为 [容器已完成。]],TaskAttempt 3 失败,info=[Container container_e14_1543885299280_8715_01_000137 已完成,诊断设置为 [Container completed。]]],由于 OWN_TASK_FAILURE,Vertex 没有成功,failedTasks:1killedTasks:40,Vertex vertex_1543885299280_8715_1_00 [Map 1] 由于:OWN_TASK_FAILURE 而被杀死/失败]DAG 由于 VERTEX_FAILURE 而没有成功。failedVertices:1killVertices:0 19/02/12 06:54:58 [ATS Logger 0]:DEBUG security.UserGroupInformation:PrivilegedAction as:bduser(auth:SIMPLE)来自:org.apache.hadoop.yarn.client.api。 impl.TimelineWriter.doPosting(TimelineWriter.java:112) info=[容器 container_e14_1543885299280_8715_01_000137 已完成,诊断设置为 [容器已完成。]]],由于 OWN_TASK_FAILURE,Vertex 没有成功,failedTasks:1killedTasks:40,Vertex vertex_1543885299280_8715_1_00 [Map 1] 由于:OWN_TASK_FAILURE 而被杀死/失败]DAG 由于 VERTEX_FAILURE 而没有成功。failedVertices:1killVertices:0 19/02/12 06:54:58 [ATS Logger 0]:DEBUG security.UserGroupInformation:PrivilegedAction as:bduser(auth:SIMPLE)来自:org.apache.hadoop.yarn.client.api。 impl.TimelineWriter.doPosting(TimelineWriter.java:112) info=[容器 container_e14_1543885299280_8715_01_000137 已完成,诊断设置为 [容器已完成。]]],由于 OWN_TASK_FAILURE,Vertex 没有成功,failedTasks:1killedTasks:40,Vertex vertex_1543885299280_8715_1_00 [Map 1] 由于:OWN_TASK_FAILURE 而被杀死/失败]DAG 由于 VERTEX_FAILURE 而没有成功。failedVertices:1killVertices:0 19/02/12 06:54:58 [ATS Logger 0]:DEBUG security.UserGroupInformation:PrivilegedAction as:bduser(auth:SIMPLE)来自:org.apache.hadoop.yarn.client.api。 impl.TimelineWriter.doPosting(TimelineWriter.java:112)

基本上 INSERT INTO TABLE 不起作用。