2016-12-16 135 views
0

有没有办法在Spark SCALA中编写SQL宏(PL/SQL或用户定义的函数)并在Spark SQL中使用它。Spark SQL中的SQL宏

例如宏基 -

CREATE Function getDeptEmployee(text IN TEXT) 
RETURN TEXT 
IS name TEXT 
Begin 
select employee_name into name from department where departmentId = text 
RETURN(name) 
End 

这样我就可以在查询中使用此getDeptEmployee。我想我不能使用udf,因为我不能使用sqlContext。

+1

您可以分享示例数据和预期输出吗? SO不是教程服务。 – mtoto

回答

1

是的,你可以使用UDF

sqlContext.udf.register("getDeptEmployee", getDeptEmployee _) 

def getDeptEmployee(text: String): String = { 
    val spark2 = SparkSession 
     .builder() 
     .getOrCreate() 
    val id = spark2.sqlContext.sql(s"select employee_name into name from department where departmentId = '$text' LIMIT 1").collect()(0).getString(0) 
    id 
} 

注册任何但是考虑使用你原来的查询连接,而不是调用火花上下文(不叫它是相当精细和快速的UDF)

的UDF
+0

谢谢,这似乎是工作。 – ashK