使用JDBC将数据帧写入Postgresql时出现java.lang.StackOverflower错误

使用JDBC将数据帧写入Postgresql时出现java.lang.StackOverflower错误,jdbc,pyspark,stack-overflow,Jdbc,Pyspark,Stack Overflow,我正在尝试将多个操作的结果写入AWS Aurora PostgreSQL集群。所有的计算都正确执行,但当我尝试将结果写入数据库时,会出现下一个错误: py4j.protocol.Py4JJavaError: An error occurred while calling o12179.jdbc. : java.lang.StackOverflowError at org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun$2.apply(T

我正在尝试将多个操作的结果写入AWS Aurora PostgreSQL集群。所有的计算都正确执行,但当我尝试将结果写入数据库时,会出现下一个错误:

py4j.protocol.Py4JJavaError: An error occurred while calling o12179.jdbc.
: java.lang.StackOverflowError
    at org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun$2.apply(TreeNode.scala:256)
    at org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun$2.apply(TreeNode.scala:256)
    at org.apache.spark.sql.catalyst.trees.CurrentOrigin$.withOrigin(TreeNode.scala:70)
    at org.apache.spark.sql.catalyst.trees.TreeNode.transformDown(TreeNode.scala:255)
我已经尝试增加集群大小(15台r4.2xlarge machines),将数据的分区数更改为120个分区,将executor和driver内存分别更改为4Gb,我面临着相同的结果

当前SparkSession配置是下一个:

spark=pyspark.sql.SparkSession\
建筑商先生\
.appName(“配置文件”)\
.config(“spark.sql.shuffle.partitions”,120)\
.config(“spark.executor.memory”,“4g”).config(“spark.driver.memory”,“4g”)\
.getOrCreate()

我不知道是Spark配置问题还是编程问题。

最后我发现了问题

问题是S3的迭代读取创建了一个非常大的DAG。我用以下指令改变了从S3读取CSV文件的方式

df=spark.read\
.format('csv')\
.option('header','true')\
.option('分隔符',';')\
.option('mode','dropmorformed')\
.option('inferSchema','true')\
.加载(列出路径)
其中,列表_路径是指向S3对象的预先计算的路径列表