无法使用JDBC将Spark数据集写入数据库

时间:2019-05-15 14:08:33

标签: java python scala apache-spark-sql

我需要将我的spark数据集写入oracle数据库表。我在追加模式下使用数据集写入方法。但是得到分析异常 使用spark2-submit命令在集群上触发spark作业时。

我已经阅读了json文件,将其展平并设置为abcDataset数据集。

火花版本-2 甲骨文数据库 JDBC驱动程序-oracle.jdbc.driver.OracleDriver 编程语言-Java

class MainViewModel(private val repository: TitleRepository) : ViewModel() {

    companion object {
        /**
         * Factory for creating [MainViewModel]
         *
         * @param arg the repository to pass to [MainViewModel]
         */
        val FACTORY = singleArgViewModelFactory(::MainViewModel)
    }


    ......
}



fun <T : ViewModel, A> singleArgViewModelFactory(constructor: (A) -> T):
        (A) -> ViewModelProvider.NewInstanceFactory {
    return { arg: A ->
        object : ViewModelProvider.NewInstanceFactory() {
            @Suppress("UNCHECKED_CAST")
            override fun <V : ViewModel> create(modelClass: Class<V>): V {
                return constructor(arg) as V
            }
        }
    }
}

预期-写入数据库但出现以下错误-

Dataset<Row> abcDataset= dataframe.select(col('abc').....{and other columns};


Properties dbProperties = new Properties();
            InputStream is = SparkReader.class.getClassLoader().getResourceAsStream("dbProperties.yaml");
            dbProperties.load(is);
            String jdbcUrl = dbProperties.getProperty("jdbcUrl");
            dbProperties.put("driver","oracle.jdbc.driver.OracleDriver");
            String where = "USER123.PERSON";
            abcDataset.write().format("org.apache.spark.sql.execution.datasources.jdbc.DefaultSource").option("driver", "oracle.jdbc.driver.OracleDriver").mode("append").jdbc(jdbcUrl, where, dbProperties);

当我在集群上运行此命令时,是否需要在spark Submit命令中设置任何其他属性?或者缺少任何步骤?

1 个答案:

答案 0 :(得分:0)

从Spark到rdbms通过jdbc进行写入时,需要使用abcDataset.write.jdbc或abcDataset.write.format(“ jdbc”)。