2017-12-11 18 views
0

Sparkを使用して、ユーザーが送信したデータの関数を呼び出しています。既存のSpark SQL関数の名前を変更する方法

既存の関数の名前をREGEXP_REPLACEREPLACEのように別の名前に変更するにはどうすればよいですか?

ss.udf.register("REPLACE", REGEXP_REPLACE)   // This doesn't work 
ss.udf.register("sum_in_all", sumInAll) 
ss.udf.register("mod", mod) 
ss.udf.register("average_in_all", averageInAll) 

答えて

3

別名でインポートそれを::

私は次のコードを試してみましたスパークSQLでそれを行うには

import org.apache.spark.sql.functions.{regexp_replace => replace } 
df.show 
+---+ 
| id| 
+---+ 
| 0| 
| 1| 
| 2| 
| 3| 
| 4| 
| 5| 
| 6| 
| 7| 
| 8| 
| 9| 
+---+ 

df.withColumn("replaced", replace($"id", "(\\d)" , "$1+1")).show 

+---+--------+ 
| id|replaced| 
+---+--------+ 
| 0|  0+1| 
| 1|  1+1| 
| 2|  2+1| 
| 3|  3+1| 
| 4|  4+1| 
| 5|  5+1| 
| 6|  6+1| 
| 7|  7+1| 
| 8|  8+1| 
| 9|  9+1| 
+---+--------+ 

を、あなたはとのハイブで再登録機能する必要があります別の名前:

sqlContext.sql(" create temporary function replace 
       as 'org.apache.hadoop.hive.ql.udf.UDFRegExpReplace' ") 

sqlContext.sql(""" select replace("a,b,c", "," ,".") """).show 
+-----+ 
| _c0| 
+-----+ 
|a.b.c| 
+-----+ 
+0

ありがとう。 spark-sqlでどのように使用できますか? ( 'hello world'、 'or'、 'ro') ")' – zzzhy

+0

@曾海云Spark SQLでは可能ではないと思います。 – philantrovert

+0

私はudfを使用してregexp_replaceをreplaceとして登録しようとしましたが、失敗しました。 – zzzhy

関連する問題