问题标签 [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 回答
4222 浏览

hive - 如何为 Hive 自定义 UDF 添加 JAR,使其在 HDInsight 群集上永久可用?

我在 Hive 中创建了一个自定义 UDF,它在 Hive 命令行中进行了测试并且工作正常。所以现在我有了 UDF 的 jar 文件,我需要做什么才能让用户能够创建指向它的临时函数?理想情况下,从 Hive 的命令提示符我会这样做: -

在此之后,我能够正确使用该功能。

但我不想每次我想执行该功能时都添加 jar。我应该能够在以下情况下运行此功能:-

  1. 从 Visual Studio 对 HDInsight 群集执行 Hive 查询
  2. 通过 SSH(Linux) 或 RDP/cmd(Windows) 从命令行执行 Hive 查询
  3. 从 Ambari (Linux) Hive 视图执行 Hive 查询
  4. 从 HDinsight 查询控制台 Hive 编辑器(Windows 集群)执行 Hive 查询

因此,无论我如何执行查询,JAR 都应该已经可用并添加到路径中。对于 Linux 和 Windows 集群,确保这一点的过程是什么?

0 投票
2 回答
358 浏览

hive-udf - 谁能提供用于截断特定列的 hive udf 代码?

我有一列包含双值 42.2223。我想截断这个特定列的最后四位数字。

任何人都可以为这种特定情况提供配置单元 UDF 吗?

0 投票
1 回答
1515 浏览

hadoop - Hive 上的 CROSS APPLY SQL Server 查询

HDP-2.5.0.0 使用 Ambari 2.4.0.1

Hive 表 ReportSetting 如下:

列“serializedreportsetting”是源 SQL Server 数据库中的 XML 数据类型,但在 Sqoop 导入期间转换为字符串,这是它在 SQL Server 中的外观:

在 Hive 表中:

在 SQL Server 上运行良好的查询:

我可以想到/做以下事情:

  1. 要使用CROSS APPLY,我猜需要使用横向视图,这里我没有将serializedreportsetting 作为数组,所以explode() 不起作用。有人可以验证我的想法是否正确
  2. 我只是尝试使用内置的 xpath udf将 serializedreportsetting 中的数据作为列获取,但是,我没有得到任何记录,一些试验如下:

    从 ReportSetting 限制 1 中选择 xpath(SerializedReportSetting,'/*');

    从 ReportSetting 限制 1 中选择 xpath(SerializedReportSetting,'/ReportSettings4');

    从 ReportSetting 限制 1 中选择 xpath(SerializedReportSetting,'/Trigger/Manual');

**********更新-1**********

我使用 regexp_replace 来处理上述挑战:

0 投票
1 回答
1104 浏览

xpath - HiveUDF + saxon 9.1.0.8 + Java8 = 未能创建 XPathFactory

除非代码中没有定义 UDF,否则我在 HiveContext 和 Saxon 上的 Spark 工作正常。在 UDF 实现的情况下 - HiveContext 初始化失败并出现错误。我听说在 saxon 9.5.1.5 中解决了 saxon\java8 不兼容问题,该版本尚未在中央 maven 存储库中作为免费版本发布:

原因:java.lang.RuntimeException:XPathFactory#newInstance() 未能为默认对象模型创建 XPathFactory:http: //java.sun.com/jaxp/xpath/dom使用 XPathFactoryConfigurationException: javax.xml.xpath.XPathFactoryConfigurationException: java.util.ServiceConfigurationError: javax.xml.xpath.XPathFactory: jar:file:/JBOD_D19/hadoop/cdh/yarn/nm/usercache/u23120d1/appcache/application_1477998759081_5017/container_e45_14701017_01_9000101017_01 /saxon-xpath-9.1.0.8.jar!/META-INF/services/javax.xml.xpath.XPathFactory:2:javax.xml.xpath.XPathFactory.newInstance(XPathFactory.java:102) 处的非法配置文件语法在 org.apache.hadoop.hive.ql.udf.xml.UDFXPathUtil.(UDFXPathUtil.java:41) 在 org.apache.hadoop.hive.ql.udf.xml.GenericUDFXPath.(GenericUDFXPath.java:53)

0 投票
1 回答
4588 浏览

apache-spark - 在 Spark SQL 中查找多个双数据类型列的中位数

我需要找到多个双数据类型列的中位数。请求建议以找到正确的方法。

下面是我的一列示例数据集。我期望样本的中值返回为 1。

我尝试了以下选项

1) Hive UDAF 百分位数,它仅适用于 BigInt。

2) Hive UDAT percentile_approx,但它没有按预期工作(返回 0.25 vs 1)。

sqlContext.sql("select percentile_approx(num,0.5) from test").show();

3)Spark窗口函数percent_rank-找到中位数我看到的方法是寻找所有高于0.5的percent_rank并选择最大percent_rank对应的num值。但它并非在所有情况下都有效,尤其是当我有记录计数时,在这种情况下,中位数是排序分布中中间值的平均值。

同样在 percent_rank 中,因为我必须找到多列的中位数,所以我必须在不同的数据帧中计算它,这对我来说是一个不太复杂的方法。如果我的理解不正确,请纠正我。

0 投票
1 回答
369 浏览

apache-spark - 当我在 pyspark EMR 5.x 中运行用 Java 编写的 hive UDF 时出错

我有一个用 java 编写的 Hive UDF,我正在尝试在 pyspark 2.0.0 中使用它。以下是步骤 1. 将 jar 文件复制到 EMR 2. 开始如下所示的 pyspark 作业

3.使用以下代码访问UDF

我收到以下错误:

py4j.protocol.Py4JJavaError: 调用 o43.sql 时出错。: java.lang.NoSuchMethodError: org.apache.hadoop.hive.conf.HiveConf.getTimeVar(Lorg/apache/hadoop/hive/conf/HiveConf$ConfVars;Ljava/util/concurrent/TimeUnit;)J 在 org.apache。 hadoop.hive.metastore.RetryingMetaStoreClient.(RetryingMetaStoreClient.java:76) at org.apache.hadoop.hive.metastore.RetryingMetaStoreClient.getProxy(RetryingMetaStoreClient.java:132) at org.apache.hadoop.hive.metastore.RetryingMetaStoreClient.getProxy (RetryingMetaStoreClient.java:104) 在 org.apache.hadoop.hive.metastore.RetryingMetaStoreClient.getProxy(RetryingMetaStoreClient.java:98) 在 org.apache.hadoop.hive.ql.metadata.Hive.createMetaStoreClient(Hive.java:2453 ) 在 org.apache.hadoop.hive.ql.session 的 org.apache.hadoop.hive.ql.metadata.Hive.getMSC(Hive.java:2465)。

0 投票
1 回答
64 浏览

hive - 用于 TOP 功能的 Hive Udf

我们正在连接来自 hana 和 hive 的表以及从智能数据访问创建查询的视图

Hana 支持 TOP 功能,但 Hive 不支持。Hive 中是否存在类似于 TOP 的任何现有 UDF。我知道在 hive 中我们有 LIMIT 但我们需要一个类似于 hana 的 UDF 函数?

请针对此问题提出任何解决方法。提前致谢。

0 投票
0 回答
978 浏览

python - hive中python udf的“选择转换”解决方案

有没有办法不将所有列都包含在 select transform() 中,而在输出中获取所有列?

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

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

有一种方法可以做到这一点:

问题是我不想在选择转换中传递所有列,因为我的表中有近 900 列,而且很难弄清楚 UDF 在哪些列上起作用。

例子:

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

这是python UDF

测试.py:

我可以通过传递所有列来实现这一点

输出 :

问题:我不想在选择转换中传递所有列,因为我有 900 列。

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

0 投票
0 回答
626 浏览

scala - 在 SparkContext 中调用现有的 Java/Hive UDF,而不在 Spark-SQL 应用程序中使用 HiveContext

我在集群上运行 Spark 1.5.0。我想使用 ESRI 的 API 中的 Hive UDF。我可以在 Spark 应用程序中使用这些 API,但由于集群中的一些问题,我无法使用 HiveContext。我想在 Spark-SQL 应用程序中使用现有的 Hive UDF。

上面的代码是针对 HiveContext 的,但我想在 SparkContext 中使用类似的东西,所以按照这个写了一些东西-

但似乎我得到了同样的错误。(见下文)

我试图用现有的 UDF 制作函数,但似乎需要制作 scala 包装器来调用 java 类。我尝试如下-

但在这种情况下得到错误 -

我只是想知道,有没有什么方法可以在不使用 HiveContext 的情况下直接使用 SqlContext 来调用 Hive/Java UDF。注意:是一个有用的帖子,但不符合我的要求。

0 投票
2 回答
2146 浏览

hive - Hive:如何检查一个数组的值是否存在于另一个数组中?

我有两个这样的数组,它们是从我创建的 UDF 返回的:

数组 A - [P908,S57,A65] 数组 B - [P908,S57]

我需要使用配置单元查询检查数组 A 的元素是否存在于数组 B 中,或者数组 B 的元素是否存在于数组 A 中。

我被困在这里。有人可以建议一种方法吗?

我还可以从 UDF 返回一些其他数据类型来代替数组以使比较更容易吗?