在 Hive 中,'positive' 函数有什么作用?
In Hive, what does the 'positive' function do?
我正在使用存储在 Hive 表中的数据开发基于项目的推荐系统,并且在 Sagar Prasad's blog 中偶然发现了类似的场景。我注意到他在 user/product.
的哈希值上使用了 POSITIVE
函数
我有点不明白为什么会有这个功能。 documentation 声明此函数采用 int
或 double
和 returns 该值:
"positive(INT/DOUBLE a) returns a"
例如:
hive> select positive(-1);
-1
这是否意味着该函数什么都不做?还是我遗漏了一些细微的差别?
在幕后,此函数是 GenericUDFOPPositive.java
,它扩展了 GenericUDFBaseUnary.java
。 positive
也可以简称为 +
.
对于数字类型,这个函数确实没有做任何有效的事情。对于文本类型,它似乎试图转换为 double
,因为 GenericUDFBaseUnary.java
包含以下内容:
private PrimitiveTypeInfo deriveResultTypeInfo(PrimitiveTypeInfo typeInfo) {
switch(typeInfo.getPrimitiveCategory()) {
case STRING:
case VARCHAR:
case CHAR:
return TypeInfoFactory.doubleTypeInfo;
default:
return typeInfo;
}
}
然而,这似乎并没有真正起作用,因为在字符串上调用 positive
只是 returns 字符串。这意味着至少,文档中此函数的类型签名是错误的,因为它接受的不仅仅是 double
和 int
.
不用担心被搞糊涂了,看了源码想弄明白这个函数是干什么用的,我现在也弄糊涂了为什么会存在!
我正在使用存储在 Hive 表中的数据开发基于项目的推荐系统,并且在 Sagar Prasad's blog 中偶然发现了类似的场景。我注意到他在 user/product.
的哈希值上使用了POSITIVE
函数
我有点不明白为什么会有这个功能。 documentation 声明此函数采用 int
或 double
和 returns 该值:
"positive(INT/DOUBLE a) returns a"
例如:
hive> select positive(-1);
-1
这是否意味着该函数什么都不做?还是我遗漏了一些细微的差别?
在幕后,此函数是 GenericUDFOPPositive.java
,它扩展了 GenericUDFBaseUnary.java
。 positive
也可以简称为 +
.
对于数字类型,这个函数确实没有做任何有效的事情。对于文本类型,它似乎试图转换为 double
,因为 GenericUDFBaseUnary.java
包含以下内容:
private PrimitiveTypeInfo deriveResultTypeInfo(PrimitiveTypeInfo typeInfo) {
switch(typeInfo.getPrimitiveCategory()) {
case STRING:
case VARCHAR:
case CHAR:
return TypeInfoFactory.doubleTypeInfo;
default:
return typeInfo;
}
}
然而,这似乎并没有真正起作用,因为在字符串上调用 positive
只是 returns 字符串。这意味着至少,文档中此函数的类型签名是错误的,因为它接受的不仅仅是 double
和 int
.
不用担心被搞糊涂了,看了源码想弄明白这个函数是干什么用的,我现在也弄糊涂了为什么会存在!