0

Ich verwende Spark, um Funktionen für die Daten aufzurufen, die vom Benutzer gesendet werden.So benennen Sie eine vorhandene Spark SQL-Funktion um

Wie kann ich eine bereits vorhandene Funktion in einen anderen Namen wie REGEXP_REPLACE zu REPLACE umbenennen?

Ich habe versucht, den folgenden Code:

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) 

Antwort

3

Import es mit einem Alias:

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| 
+---+--------+ 

es mit Spark-SQL zu tun, werden Sie die Funktion in Hive neu registrieren müssen mit ein anderer Name:

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

vielen Dank. Wie kann ich in Spark-SQL verwenden? wie 'spark.sql (" wählen Sie REPLACE ('Hallo Welt', 'oder', 'ro') ") – zzzhy

+0

@ 曾 海云 Ich denke nicht, dass das mit Spark SQL möglich ist. – philantrovert

+0

ok, ich wollte udf verwenden, um regexp_replace als Ersatz zu registrieren, aber fehlgeschlagen. – zzzhy