Python Spark卡在rdd.collect上

时间:2019-07-12 12:19:40

标签: python apache-spark pyspark

我是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笔记本执行此代码。 它不会记录任何错误,只需永远执行即可。

我不知道发生了什么事。

谢谢您的时间!

1 个答案:

答案 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分钟的时间内完成。