簡體   English   中英

如何注銷Spark UDF

[英]How to unregister Spark UDF

我在Java中使用Spark 1.6.0。

我想注銷Spark UDF。 有沒有像刪除臨時表sqlContext.drop(TemporaryTableName)

    sqlContext.udf().register("isNumeric", value -> {
        if(StringUtils.isNumeric((String)value)) {
            return 1;
        } else {
            return 0;
        }
    }, DataTypes.IntegerType);

sqlContext.functionRegistry().listFunction().toSet().toString()

我試圖從當前的sqlContext中獲取所有函數(包括我們定義的UDF),並且可以使用,但是有什么方法可以注銷自定義UDF'isNumeric'

通過執行以下SQL可以注銷udf。

spark.sql("drop temporary function isNumeric")

下面的代碼片段顯示了創建UDF和刪除UDF的過程。

scala> spark.udf.register("test", (value: String) => value.toInt)
res16: org.apache.spark.sql.expressions.UserDefinedFunction = UserDefinedFunction(<function1>,IntegerType,Some(List(StringType)))

scala> spark.catalog.listFunctions.filter(_.name == "test").collect
res17: Array[org.apache.spark.sql.catalog.Function] = Array(Function[name='test', className='null', isTemporary='true'])

scala> spark.sql("drop temporary function test")
res18: org.apache.spark.sql.DataFrame = []

scala> spark.catalog.listFunctions.filter(_.name == "test").collect
res19: Array[org.apache.spark.sql.catalog.Function] = Array()

Spark 1.6v

scala> sqlContext.sql("drop temporary function test")
{"level": "INFO ", "timestamp": "2017-06-09 05:43:44,650", "classname": "hive.ql.parse.ParseDriver", "body": "Parsing command: drop temporary function test"}
{"level": "INFO ", "timestamp": "2017-06-09 05:43:44,650", "classname": "hive.ql.parse.ParseDriver", "body": "Parse Completed"}
{"level": "INFO ", "timestamp": "2017-06-09 05:43:44,655", "classname": "hive.ql.parse.ParseDriver", "body": "Parsing command: drop temporary function test"}
{"level": "INFO ", "timestamp": "2017-06-09 05:43:44,656", "classname": "hive.ql.parse.ParseDriver", "body": "Parse Completed"}
res7: org.apache.spark.sql.DataFrame = [result: string]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM