我想将数据帧中的内容传递到我的SQL存储过程。我使用map函数遍历数据帧内容并将它们发送到数据库。尝试这样做时出现错误。将数据帧内容传递到SQL存储过程
我得到一个错误呼吁没有找到所有 编码器 - 场(类: “java.lang.Object继承”,名称: “_1”) - 根类: “scala.Tuple2”
莫非有人帮我纠正这一点。
下面是我的代码
val savedDataFrame = dataFrame.map(m => sendDataFrameToDB(m.get(0), m.get(1), m.get(2), m.get(3)))
savedDataFrame.collect()
def sendDataFrameToDB(firstName : String, lastName : String, address : String, age : Long) = {
var jdbcConnection: java.sql.Connection = null
try {
val jdbcTemplate = new JDBCTemplate()
jdbcTemplate.getConfiguration()
jdbcConnection = jdbcTemplate.getConnection
if (jdbcConnection != null) {
val statement = "{call insert_user_details (?,?,?,?)}"
val callableStatement = jdbcConnection.prepareCall(statement)
callableStatement.setString(1, firstName)
callableStatement.setString(2, lastName)
callableStatement.setString(3, address)
callableStatement.setLong(4, age)
callableStatement.executeUpdate
}
} catch {
case e: SQLException => logger.error(e.getMessage)
}
}
试** **的foreach,而不是地图 –
没有不能用的foreach。 map提供比foreach更好的性能 – Kepler
然后为map [doc]提供编码器(https://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.sql.Dataset) –