Paulo Cereda
05/30/2025, 3:49 PMfun ResultSet.asSequence(): Sequence<ResultSet> = sequence {
while (next()) {
yield(this@asSequence)
}
}
operator fun ResultSet.get(index: Int): Any? = this.getObject(index)
fun ResultSet.toDataFrame(): DataFrame<*> =
mutableMapOf<String, MutableList<Any?>>()
.let { map ->
val names = List(metaData.columnCount) {
metaData.getColumnName(it + 1)
}
this
.asSequence()
.forEach { row ->
names.mapIndexed { index, name ->
map[name]?.add(row[index + 1]) ?: map.put(name, mutableListOf(row[index + 1]))
}
}
map
}.toDataFrame()
Hope someone can make use of this (even as a counterexample). 😁 Cheerio!Jolan Rensen [JB]
06/03/2025, 10:10 AMfun ResultSet.toDataFrame(): DataFrame<*> =
buildMap<String, MutableList<Any?>> {
val names = List(metaData.columnCount) {
metaData.getColumnName(it + 1)
}
this@toDataFrame.asSequence().forEach { row ->
names.forEachIndexed { index, name ->
this.getOrPut(name) { mutableListOf() } += row[index + 1]
}
}
}.toDataFrame()
An approach like this works great for any type of database. If you can convert something to a list or map, you can make a DataFrame from it.
Regarding JDBC ResultSets, however, we do offer a special "helper" argument dbType: DbType
which you can define for any unsupported JDBC database you want. Then you can simply DataFrame.readResultSet(resultSet, dbType)
. See the docs for more info about this approach.Paulo Cereda
06/03/2025, 5:40 PM