我是Spark世界的新手。
我正在使用pyspark在本地计算机上测试Spark。我创建了以下脚本,但是当它到达rdd.collect()
方法时,它只会卡住。
sparkSession = SparkSession.builder.appName("SimpleApp")\
.getOrCreate()
_data_frame_reader_ = sparkSession.read.format("jdbc").option("url", url) \
.option("user", user) \
.option("password", password) \
.option("driver", "oracle.jdbc.driver.OracleDriver")
mytable = _data_frame_reader_.option("dbtable", 'my_test_table')
mytable .registerTempTable("my_test_table")
sql = 'SELECT * from my_test_table'
df = sparkSession.sql(sql)
for row in df.rdd.collect():
# do some operation
我的表只有大约50条记录。我能够通过SQLDeveloper连接到我的数据库。
现在,我正在尝试通过Jupyter笔记本执行此代码。 它不会记录任何错误,只需永远执行即可。
我不知道发生了什么事。
谢谢您的时间!
答案 0 :(得分:0)
我知道发生了什么事。我的表只有50条记录,但与其他表有很多行的FK。我让该作业运行了30分钟以上,但没有完成。我做了以下事情:
1-在数据库配置中添加了提取大小:
_data_frame_reader_ = sparkSession.read.format("jdbc").option("url", url) \
.option("user", user) \
.option("password", password) \
.option("fetchsize", "10000") \
.option("driver", "oracle.jdbc.driver.OracleDriver")
这将提高负载性能。参见this documentation。
2-我已经对查询进行了调整,以仅获取所需的记录,包括一些联接并在其他表中创建wheres
来过滤依赖行。
现在我的工作在不到2分钟的时间内完成。