2017-12-11 11 views
0

Spark를 사용하여 사용자가 제출 한 데이터에서 함수를 호출합니다.기존 Spark SQL 함수의 이름을 바꾸는 방법

기존 함수를 REGEXP_REPLACE에서 REPLACE과 같은 다른 이름으로 어떻게 바꿀 수 있습니까? 별명을 가진

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

가져 오기를 :

나는 다음과 같은 코드를 시도

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

는 스파크 SQL 함께 할 대상을, 당신과 함께 하이브에 다시 등록 기능을해야합니다 다른 이름 :

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에서 어떻게 사용할 수 있습니까? 'spark.sql ("REPLACE ('hello world ','or ','ro ')"를 선택하십시오.) – zzzhy

+0

@ 曾 海云 Spark SQL에서는 가능하지 않다고 생각합니다. – philantrovert

+0

그래, 대체로 regexp_replace를 등록하기 위해 udf를 사용하려고했지만 실패했습니다. – zzzhy