如何解决“SparkException:Future.get 中抛出的异常”问题?

Posted

技术标签:

【中文标题】如何解决“SparkException:Future.get 中抛出的异常”问题?【英文标题】:How can I resolve "SparkException: Exception thrown in Future.get" issue? 【发布时间】:2019-06-21 20:40:26 【问题描述】:

我正在处理两个 pyspark 数据帧,并对它们进行左反连接以跟踪日常变化,然后发送电子邮件。 第一次尝试:

diff = Table_a.join(
    Table_b, 
    [Table_a.col1== Table_b.col1, Table_a.col2== Table_b.col2], 
    how='left_anti'
)

预期的输出是一个包含一些数据或没有数据的 pyspark 数据帧。

这个 diff 数据框从 Table_a 获取它的架构。 我第一次运行它时,没有按模式表示显示任何数据。下一次就抛出 SparkException:

Exception thrown in Future.get

【问题讨论】:

我遇到了同样的问题。我的用例是我使用looker 来构建BI 模型,而looker 会将我的模型转换为spark-sql。在某些情况下,查询失败并出现错误The Apache Spark 2.0 database encountered an error while running this query. org.apache.spark.SparkException: Exception thrown in Future.get: 【参考方案1】:

我使用 Scala,但根据我的经验,当其中一个基础表以某种方式发生更改时,就会发生这种情况。我的建议是尝试简单地运行 display(Table_a)display(Table_b),看看这些命令是否失败。这应该会提示您问题出在哪里。

无论如何,为了有效解决问题,我的建议是清除运行中的缓存

%sql
REFRESH my_schema.table_a
REFRESH my_schema.table_b

然后,重新定义这些变量,如

Table_a = spark.table("my_schema.table_a")
Table_b = spark.table("my_schema.table_b")

这对我有用 - 希望它也可以帮助你。

【讨论】:

【参考方案2】:

谢谢@Lucas Lima。每次创建新表时,我都会在 pyspark 中使用以下命令清除缓存:

table_a.cache()

希望信息有所帮助。

【讨论】:

@Anasta_Sia 不应该是table_a.uncache() 而不是table_a.cache()【参考方案3】:

我遇到了类似的问题。问题的根本原因是数据类型不匹配。 在保存数据时,我的列之一的数据类型为 IntegerType,当我加载相同的数据时,我在架构中提供了不正确的数据类型,因此它引发了异常。 这不会立即引发任何异常,直到您对加载的数据调用 show()count 等数据的任何操作。

错误截图:

【讨论】:

以上是关于如何解决“SparkException:Future.get 中抛出的异常”问题?的主要内容,如果未能解决你的问题,请参考以下文章

如何解决包冲突问题

如何解决包冲突问题

如何解决ajax跨域问题

MySQL 的 10048问题,如何解决?

如何解决smartgit的冲突问题

如何解决https传输图片的问题