Apache spark 数据帧计数是否会触发spark.drive.maxResultSize限制?

Apache spark 数据帧计数是否会触发spark.drive.maxResultSize限制?,apache-spark,apache-spark-sql,Apache Spark,Apache Spark Sql,我有一个spark(2.4)作业失败,异常为“org.apache.spark.sparkeexception:作业因阶段失败而中止:5252个任务的序列化结果的总大小大于spark.driver.maxResultSize” 这是我的代码片段,它涉及两个数据帧连接 val df_a = ... //load from HDFS val df_b = ... //load from HDFF val a_deduped = df_a.dropDuplicates("id") val a_dupl

我有一个spark(2.4)作业失败,异常为“org.apache.spark.sparkeexception:作业因阶段失败而中止:5252个任务的序列化结果的总大小大于spark.driver.maxResultSize”

这是我的代码片段,它涉及两个数据帧连接

val df_a = ... //load from HDFS
val df_b = ... //load from HDFF
val a_deduped = df_a.dropDuplicates("id")
val a_duplicates = df.exceptAll(a_deduped)
val duplicates = a_deduped.join(df_b, col("id")===col("history_id"), "left_outer").where(col("history_id").isNotNull)
val df_c = a_deduped.union(duplicates)
df_c.count
触发此故障的代码是
df_c.count


只是想知道数据帧计数是如何工作的?我的理解是,它对每个分区的行数求和,并向驱动程序返回一个整数,因此向驱动程序的数据传输应该是最小的。但为什么满足dirver.maxResultSize限制?有什么想法吗?

需要您的示例代码片段,如果没有它,您很难理解您在那里做什么。您可能希望按照答案进行操作。特别尝试禁用
autobroadcastJoinThreshold
a\u duplicated
duplicates
之间的
union
似乎不正确,因为它们具有不同的架构。将连接类型更改为
left\u semi
,并删除
中的
where
clause@Gsquare我的连接数据比autobroadcastJoinThreshold大得多,因此不应启用广播,但将尝试禁用它以查看是否有帮助。重新升级union,我上面的代码是伪代码,只是尝试演示逻辑,无论如何,谢谢。需要您的示例代码段,您很难理解您在那里做什么。您可能希望按照答案进行操作。特别尝试禁用
autobroadcastJoinThreshold
a\u duplicated
duplicates
之间的
union
似乎不正确,因为它们具有不同的架构。将连接类型更改为
left\u semi
,并删除
中的
where
clause@Gsquare我的连接数据比autobroadcastJoinThreshold大得多,因此不应启用广播,但将尝试禁用它以查看是否有帮助。重新升级联合,我上面的代码是伪代码,只是想演示一下逻辑,谢谢。