我正在尝试连接到oracle数据库,为此我必须使用纯scala连接,而不是spark连接。所以我为oracle数据库编写了连接代码。
现在最头疼的是我在oracle表中有一个列,它为每一行编写了一个select查询(表中有元数据)。我需要获取写在每一列中的查询并激发它,它将位于hive表中,并将查询结果存储在dataframe中。我不知道用什么方法来解决上述问题。
oracle表数据
我可以使用纯scala连接连接到oracle表,我需要获取查询列数据并启动它。我需要将查询结果存储在dataframe中以便进一步处理。
连接code:-
object ScalaJdbcConnectSelect {
def main(args: Array[String]) {
// connect to the database named "mysql" on the localhost
val driver = "com.mysql.jdbc.Driver"
val url = "jdbc:mysql://localhost/mysql"
val username = "root"
val password = "root"
var connection:Connection = null
try {
// make the connection
Class.`enter code here`forName(driver)
connection = DriverManager.getConnection(url, username, password)
// create the statement, and run the select query
val statement = connection.createStatement()
val resultSet = statement.executeQuery(query)`
1条答案
按热度按时间n1bvdmb61#
您可以从spark连接到oracle,您应该这样做,因为否则您必须在使用spark读取数据之前,按顺序将所有数据带到某个中间存储中,这与多个数据库连接并行检索数据相比是相当浪费的。
你得到你的结果了吗
df
首先,然后可以收集查询列,循环遍历并将收集的查询添加到reader
创建新的DataFrame
.如果你坚持使用你的方法,那么你已经有了一个
ResultSet
2, . 只需在遍历行时获取列,然后将查询用于Connection
.你可以看到
try catch
不是很漂亮。如果需要,可以创建
Dataset
在外面ResultSet
,但请注意,这需要加载整个RestulSet
如果数据太大,你可能会用完。注意,您必须提供一个从
ResultSet
并示例化class
以及类的编码器。下面是一个例子。所以最好的方法就是使用spark的
DataFrameReader
并让spark workers与数据库建立多个连接,但这实际上只在有问题的数据可能导致驱动程序内存不足时才起作用。您总是可以得到这样的所有查询的列表。