データフレームの内容をSQLストアドプロシージャに渡そうとしています。マップ関数を使用してデータフレームの内容を反復し、dbに送信します。私はそれをしようとするとエラーがあります。 (:、名前 "java.lang.Objectの": "_1" クラス) - ルートクラス: "scala.Tuple2"データフレームの内容をSQLストアドプロシージャに渡す
でしたが、フィールド - 私はエラーを取得しています
はどれ が見つかりませエンコーダと呼ばれていません誰でも私にこれを是正するのを助けます。
以下は、自分のコード
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)のエンコーダ –