如何使用Apache Spark在包内调用db函数

时间:2018-08-14 10:30:26

标签: java apache-spark apache-spark-sql

我在oracle db中有一个软件包pkg_multi_parm_price_agg,该软件包具有功能

 FUNCTION FN_GET_GROUP_ID_WRAPPER_F(PI_PARM_CODE_VAL_STR IN VARCHAR2,
                                     PI_PARM_COUNT        IN NUMBER)
    RETURN TXN_DTL_PRITM.PRICEITEM_PARM_GRP_ID%TYPE;

当前正在使用JDBC准备的语句,我可以使用以下查询并提供所需的参数在我的Java项目中成功调用它:

SELECT pkg_multi_parm_price_agg.fn_get_group_id_wrapper_F(?,?) FROM DUAL;

我想了解是否可以使用 Java 使用Apache Spark调用相同的内容?

编辑-该问题是有关使用Java通过Apache Spark功能调用数据库函数的。因此,我认为这是一个不同的问题,否则请更正我的理解。

1 个答案:

答案 0 :(得分:0)

  val sqlContext = SQLContext.getOrCreate(sc)
  import sqlContext.implicits._

  val jdbcHostname = "localhost"
  val jdbcPort = 3306
  val jdbcDatabase = "test"
  val jdbcUsername = "root"
  val jdbcPassword = "password"
  val jdbcUrl = s"jdbc:mysql://${jdbcHostname}:${jdbcPort}/${jdbcDatabase}?user=${jdbcUsername}&password=${jdbcPassword}"

  val query = """( select query ) foo"""

  val df = sqlContext.read.format("jdbc")
    .option("driver", "com.mysql.jdbc.Driver")
    .option("url", jdbcUrl)
    .option("useUnicode", "true")
    .option("continueBatchOnError", "true")
    .option("dbtable", query).option("user", jdbcUsername)
    .option("password", jdbcPassword)
    .load()

用查询替换select query。它将为您提供数据框。