我需要将我的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命令中设置任何其他属性?或者缺少任何步骤?
答案 0 :(得分:0)
从Spark到rdbms通过jdbc进行写入时,需要使用abcDataset.write.jdbc或abcDataset.write.format(“ jdbc”)。