如何解决“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 中抛出的异常”问题?的主要内容,如果未能解决你的问题,请参考以下文章