时间:2021-07-01 10:21:17 帮助过:4人阅读
我们模拟了一张数据表temp_table,该表仅有一列,其中列名称为col,列类型为字符串且不允许包含Null,输出结果:
我们在表temp_table的基础之上演示UDF的使用方法:
首先我们定义一个普通的Python函数:func_string,为了简单起见它没有任何参数,仅仅返回一个简单的字符串;
然后我们通过HiveContext registerFunction即可以将函数func_string注册为UDF,registerFunction接收两个参数:UDF名称、UDF关联的Python函数;
最后我们可以在Spark(Hive) SQL中使用这个UDF,输出结果:
我们需要注意的是,HiveContext registerFunction实际上有三个参数:
name:UDF名称;
f:UDF关联的Python函数;
returnType:UDF(Python函数)返回值类型,默认为StringType()。
上述示例中因为我们的UDF函数的返回值类型为字符串,因此使用Hive registerFunction注册UDF时省略了参数returnType,即returnType默认值为StringType(),如果UDF(Python函数)的返回值类型不为字符串,则需要显式为其指定returnType。
我们以类型IntegerType、ArrayType、StructType、MapType为例演示需要显式指定returnType的情况。
(1)IntegerType
(2)ArrayType
注意:ArrayType(数组)必须确保元素类型的一致性,如指定UDF返回值类型为ArrayType(IntegerType()),则函数func_array的返回值类型必须为list或tuple,其中的元素类型必须为int。
(3)StructType
注意:StructType必须确保函数的返回值类型为tuple,而且使用HiveContext registerFunction注册UDF时需要依次为其中的元素指定名称各类型,如上述示例中每一个元素的名称为first,类型为IntegerType;第二个元素的名称为second,类型为FloatType;第三个元素的名称为third,类型为StringType。
(4)MapType
注意:MapType必须确保函数的返回值类型为dict,而且所有的“key”应保持类型一致,“value”也就保持类型一致。
Spark(Hive) SQL中UDF的使用(Python)【转】
标签:注意 自定义 ble use 创建 依赖 应用 工作 oca