我注意到我的Scala程序无法按预期运行。
基本上,它通过jdbc与一个数据库连接,并调用一个存储过程,该存储过程将加载一个表,该表具有例如1000行(一个一行)。
我的scala程序的下一步是读取该表并进行一些计算。这是出现问题的地方,因为它读取的行较少(例如,大约30条),而不是1000条。
显然,这表明通过spark将应用程序分发到群集中的过程尚未正确等待SP使它完成工作,并且它继续执行下一个预期的指令。
我添加了Thread.sleep(10000)
,情况有所改善,但是我根本不喜欢使用该替代方法来解决此问题。
我也尝试过仅用一个执行程序来执行应用程序,问题仍然存在。
你们中的有些人也有这个问题?您是如何解决的?
预先感谢
示例代码:
// sp which generates 1000 records in one table in database
mMeta.getConnection().prepareCall("{call " + mMeta.getDatabaseName + ".[dbo].SP_Create1000rows}")
// method which grabs the rows from database created in previous code
Process1000rows()
Process1000rows方法获得约40行,因为它不等待存储过程完成。
但是,如果我在两条指令之间都添加了Thread.sleep(10000)
,则该方法将占用SP生成的1000行。
希望现在更清楚...