spark sql 调试技巧--内置udf查看
Spark SQL内置了许多常用的udf,我们该如何拿到用户的udf和内置的udf呢?
DataFrame级别
对于DataFrame级别的udf,我们可以访问functions找到我们需要的函数。这里我们就不过多讲解。
SQL级别
对于sql级别其实spark是提供了查询接口的
http --form POST http://localhost:9003/run/sql \
sql='
show functions
'
查询结果:
[
{
"function": "from_json"
},
{
"function": "to_json"
},
{
"function": "to_timestamp"
},
{
"function": "to_unix_timestamp"
},
{
"function": "to_utc_timestamp"
},
{
"function": "translate"
}
]
查询结果过多,只列出部分
虽然我们查询到了方法,但是我们该如何去查看udf该怎么使用呢?其实spark sql也是提供了查询接口的
我们可以用describe function extended ${function_name}语法来查看function_name如何使用。例如,我们要查询from_json如何使用:
describe function extended from_json
查询结果:
[
{
"function_desc": "Function: from_json"
},
{
"function_desc": "Class: org.apache.spark.sql.catalyst.expressions.JsonToStructs"
},
{
"function_desc": "Usage: from_json(jsonStr, schema[, options]) - Returns a struct value with the given `jsonStr` and `schema`."
},
{
"function_desc": "Extended Usage:\n Examples:\n > SELECT from_json('{\"a\":1, \"b\":0.8}', 'a INT, b DOUBLE');\n {\"a\":1, \"b\":0.8}\n > SELECT from_json('{\"time\":\"26/08/2015\"}', 'time Timestamp', map('timestampFormat', 'dd/MM/yyyy'));\n {\"time\":\"2015-08-26 00:00:00.0\"}\n "
}
]
通过desc我们就可以查询相关的udf的实现类,使用方法和用例。
问题
但是对用户注册的udf现在版本并没有提供相关的接口,注册相关信息。