我尝试将dataframe中的内容传递到我的sql存储过程中。我使用map函数遍历dataframe内容并将它们发送到db中。我在尝试这样做的时候出错了。
对于任何字段(类:"java.lang.Object",名称:"_1") -根类:"scala.Tuple2“,我收到一个名为No Encoder found的错误
有人能帮我改正这个错误吗?
下面是我的代码
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)
}
}发布于 2017-08-08 14:45:41
passing Dataframe contents into sql stored procedure
dataFrame.map(m => sendDataFrameRDBMS(f.getAs("firstname").toString,f.getAs(“dataFrame.map”).toString,f.getAs("address").toString,f.getAs(“age”).toString.toLong)
m.get(0)属于Any类型,根据您的示例,它不能直接传递给String类型的firstName。数据帧不同于RDD。"DataFrame是一个组织成命名列的数据集。它在概念上等同于关系数据库中的表或R/Python语言中的数据框架,但在幕后进行了更丰富的优化“link
当您创建数据帧时,会生成如下列
val dataFrame = dataSet.toDF("firstname", "lastName", "address", "age")然后,您可以访问dataframe中的元素,如下所示,并将其传递到您的方法中
dataFrame.map(m => sendDataFrameRDBMS(f.getAs("firstname").toString, f.getAs("lastname").toString, f.getAs("address").toString, f.getAs("age").toString.toLong))https://stackoverflow.com/questions/45531044
复制相似问题