问题标签 [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.
java - Pig Java UDF基于位置解析字符串,返回包含带有生成键的子字符串的包
我有一列是字符串字段。我需要读入这个字符串,将其存储在一个袋子中并给它一个密钥(所以当我将它存储为 JSON 时,它是唯一的。
我的示例数据文件是: “test, kyle”
我希望我的输出看起来像: {"test":[{"key": "test"}, {"value":"kyle"}]}
我遇到的问题是这一行:
基本上,我从元组中读取的每个值都需要一个不同的识别键,这样当使用 Pig 完成时,我可以引用我添加的这些新列。
我对 Pig 尤其是 UDFS 还是很陌生,所以如果需要更多信息,请告诉我。
java - Pig Java UDF:根据输入参数生成动态元组模式
编辑:我将尝试解释我想要做什么。
1行输入看起来像:field1,field2,textfield
现在textfield是一个字符串条目,它是固定数量的字符。我想解析这个字符串以从这些字符中提取子字符串。例如,我想提取前 10 个字符并将其设为字段,提取接下来的 15 个字符并将其设为字段,等等...
那部分很好。问题变成不是每一行都有相同的文本字段规则。基本上field1和field2将代表我用来解析该文本字段的键。映射中的这个键将指向我正在提取的所有字段名称的数组(用于输出)以及字符串中每个字段的长度(以便我可以解析)。
我遇到的问题是我的每个输出都将是一个包含不同字段和值的包。有些行可能有一个包含 10 个元组的包,其他行有 5 个或 6 个。我需要一种方法来在 exec 函数中定义我的模式。
编辑:
我的主要目标是能够使用我的 UDF 输入参数来使用查找图来导出我的输出模式。我将把这篇文章的其余部分留在这里作为参考,但我的主要目标是学习或找出是否可以使用输入参数然后访问映射来检索我的字段类型数组。
我试图返回一袋元组,每个元组都有一个别名或键。我有一个包含我需要用作元组别名的字符串数组的映射。根据用户对 UDF 的输入,我将获取包含我的模式的正确数组。
这在我的 exec 函数中工作正常,因为我有用户的输入。但我不知道如何将该输入也用于我的输出模式。
对于 UDF 输入,第一个参数结合第二个参数将是获取数组的键。第三个参数是一个大文本字段,我需要以特定字符间隔解析它,每个数组都不同。
**这里我需要一些方法来根据用户的输入来访问下面的数组,以确定使用哪个模式来填写。我现在在这里硬编码垃圾。但在我的 for 循环中,我需要正确的 array.length,然后当我设置字段模式时,我将使用 array[i]
但我无法访问此函数中的数组**
实际上,我将有 10 多个数组,输入将决定我使用哪个数组和哪个模式。我已经坚持了一段时间了,无论我尝试什么,我似乎都无法得到它。
hive - Hive 中简单 UDF 的奇怪行为
我有一个使用以下代码创建的配置单元表:
我需要使用自写的 UDFip
以相反的顺序输出每个(是的,这是一个非常简单的问题)。SELECT ip FROM IPRegions
为此,我编写了以下 UDF:
比我jar
用这个 UDF 构建 -file 并编写这样的查询:
但我咳嗽了一个例外:
正如我在许多示例中看到的,在 UDF 中经常使用hadoop 类型而不是普通的 java 类型。比我重写并重建我的 UDF:
但这没有帮助。那么,我的错误在哪里?我应该如何更改 UDF 或查询来解决这个问题?
sql-server - SQL Server 函数返回无法识别的文本
我创建了一个用户定义的函数,该函数从 HTML 标记中删除输入文本,但发现它也出于某种原因破坏了阿拉伯文本。
我想:也许函数的逻辑导致文本在某处被转换为 VARCHAR,所以我使函数变得非常简单。它需要一个 NVARCHAR 并将其返回给调用者。这是函数:
然后我做了一个小测试:
输出是:
如果我这样做,输出很好:
为什么会这样?
sql - 用户定义函数 (TSQL) 非确定性和计算的持久列
我有一个表,其中的列中有两列类型INT
,它们被称为:
和
我想在此表中添加一个新列,其值将根据 和 的值ExpirationMonth
计算 ExpirationYear
。所以这个列将是一个计算列。
为此,我创建了一个用户定义的标量函数,它根据 和 的值计算该列的ExpirationMonth
值 ExpirationYear
。该函数的定义如下:
最初,我尝试添加如下列:
我收到以下错误:
无法保留表“Table_Name”中的计算列“IsExpired”,因为该列是不确定的。
我PERSISTED
从上述语句中删除了它,然后再次运行它。然后我注意到该列已添加了预期值。
我的问题是,如果可能的话,我怎样才能使这个专栏持久化?
我意识到这个错误的原因是GETDATE
函数中IsExpired
函数的使用。由于GETDATE
不是确定性的,所以IsExpired
不是确定性的。
但是,我看不出我们如何使这个函数 ,IsExpired
具有确定性,并因此将计算列定义为持久化(如果可能的话)。
你能告诉我这是否可能,如果是的话,我该怎么做。
excel - 删除不相关的单元格时需要停止重新计算 UDF
我注意到每当我删除单元格时,我的 UDF 都会重新计算。这会在删除整个列时导致大量延迟,因为 UDF 会为使用它的每个单元格调用。因此,如果您使用 1000 个 UDFS,则删除列或单元格将调用 1000 次。
例如,将以下 UDF 放入模块中,然后使用 =HelloWorld() 从工作表中多次调用它
然后删除一行。如果你的经验和我一样,你会看到每次使用都会调用一次。
有人知道这种行为是否可以停止吗?我也很感兴趣为什么它应该被调用。对我来说,这似乎是 Excel 依赖树中的一个缺陷,但很可能有一个很好的理由。
编辑:经过实验,我发现了更多触发 UDFS 的操作:
- 通过调整大小(但不是行)对 ListObject(即 Excel 表)跨越的列数进行的任何更改。即使 UDF 本身不在相关的 ListObject 中,或者实际上根本不在任何ListObject 中。
- 在工作表的任何位置(但不是行)添加新的单元格或列。
请注意,手动计算模式在多个方面都不是一个选项。
首先,鉴于这是一个应用程序级别的设置,它只会带来太大的风险,即有人会使用他们碰巧打开的任何一个电子表格的输出而没有意识到它们处于手动计算模式。
其次,我实际上并不是在设计一个特定的电子表格,而是在写一本关于非开发人员如何利用编写良好的现成代码(如 UDF)来完成原本超出他们能力范围的事情的书。示例包括动态连接或拆分文本,或 Charles Williams 在https://fastexcel.wordpress.com/2011/07/22/developing-faster-lookups-part-2-how-to-中概述的完全匹配二进制搜索 UDF build-a-faster-vba-lookup/ (是的,我给了他们很多警告,通常基于原生公式的解决方案会胜过 UDF。但正如您从我上面引用的线程中看到的那样,精心编写的函数可以很好地发挥作用)。
我不知道用户将如何使用这些。
在没有编程解决方案的情况下,看起来我只需要在书中指出,如果用户使用资源密集型 UDFS,则在添加或删除单元格或调整 ListObjects 大小时可能会遇到明显的延迟。即使这些 UDF 是有效编写的。
hadoop - pig udf 中是否有类似 setup 的功能
我想为一个文件添加 mapDB 以供猪 UDF 中的所有映射器使用。如何一次性设置此 mapDB 对象?当 pig udf 被实例化时,我们是否有任何函数只会被调用一次?
谢谢。
java - 多个元组作为用 Java 编写的 pig UDF 中的输入
pig 脚本的示例输出:
我最终想在我的 java UDF 中创建一个直方图。如何在我的 UDF 中一次输入所有这些?
sql - TD_WEEK_OF_CALENDAR 的配置单元等效项
我正在尝试实现一个已经在Hiveweekofyear()
中为 Teradata 编写的查询,并且到目前为止一直在使用该方法作为替代TD_WEEK_OF_CALENDAR
方法,该方法返回一个 INTEGER 值,该值表示自 1900 年 1 月 1 日(包括 1900 年 1 月 1 日)以来的整周数,其中第一个部分周为 0。
我在 Hive 中找不到与此方法相关的任何其他预定义 UDF。即使是用 Java 编写自定义 UDF,我也无法获得TD_WEEK_OF_CALENDAR
.
有人可以帮忙吗?
hadoop - Pig SUM 一列,直到它达到某个值并返回行
有人可以帮我计算一个列的总和,直到它达到某个值。用例:产生 50% 收入的顶级产品。
有没有像piggybank这样的图书馆来完成它,我在piggybank中找不到它。
我正在尝试实施UDF,但我担心这是唯一的方法:(。
这是数据结构的样子-
productId、totalProfitByProduct、totalProfitByCompany、totalRevenueOfCompany。
totalProfitByProduct 上的数据按降序排列。totalProfitByCompany、totalRevenueOfCompany 对于每一行都保持不变。
现在我想从顶部对上面的每个产品应用总和超过 totalProfitByProduct 并获得产生超过 50% 的 totalProfitByCompany 或 totalRevenueOfCompany 的顶级产品