由于阶段失败,Pyspark 作业中止错误
Posted
技术标签:
【中文标题】由于阶段失败,Pyspark 作业中止错误【英文标题】:Pyspark job aborted error due to stage failure 【发布时间】:2021-01-11 17:01:12 【问题描述】:我有以下代码:
# fact table
df = (spark.table(f'nn_squad7_country.fact_table')
.filter(f.col('date_key').between(start_date,end_date))
#.filter(f.col('is_lidl_plus')==1)
.filter(f.col('source')=='tickets')
.filter(f.col('subtype')=='trx')
.filter(f.col('is_trx_ok') == 1)
.join(dim_stores,'store_id','inner')
.join(dim_customers,'customer_id','inner')
.withColumn('week', f.expr('DATE_FORMAT(DATE_SUB(date_key, 1), "Y-ww")'))
.withColumn('quarter', f.expr('DATE_FORMAT(DATE_SUB(date_key, 1), "Q")')))
#checking metrics
df2 =(df
.groupby('is_client_plus','quarter')
.agg(
f.countDistinct('store_id'),
f.sum('customer_id'),
f.sum('ticket_id')))
display(df2)
当我执行查询时,我收到以下错误:
SparkException:作业因阶段失败而中止:阶段 13.0 中的任务 58 失败 4 次,最近一次失败:阶段 13.0 中丢失任务 58.3(TID 488、10.32.14.43、执行程序 4):java.lang.IllegalArgumentException:非法模式字符'Q'
我不确定为什么会收到此错误,因为当我单独运行事实表块时,我没有收到任何错误。
有什么建议吗?谢谢!
【问题讨论】:
不知道为什么会这样,但请尝试使用quarter(DATE_SUB(date_key, 1))
而不是DATE_FORMAT(DATE_SUB(date_key, 1), "Q")
【参考方案1】:
根据 Spark 3 的 docs,“Q”是有效的日期时间格式模式,尽管它不是有效的 Java 时间格式。不知道为什么它对您不起作用 - 可能是 Spark 版本问题。尝试改用函数quarter
,它应该给出相同的预期输出:
df = (spark.table(f'nn_squad7_country.fact_table')
.filter(f.col('date_key').between(start_date,end_date))
#.filter(f.col('is_lidl_plus')==1)
.filter(f.col('source')=='tickets')
.filter(f.col('subtype')=='trx')
.filter(f.col('is_trx_ok') == 1)
.join(dim_stores,'store_id','inner')
.join(dim_customers,'customer_id','inner')
.withColumn('week', f.expr('DATE_FORMAT(DATE_SUB(date_key, 1), "Y-ww")'))
.withColumn('quarter', f.expr('quarter(DATE_SUB(date_key, 1))')))
【讨论】:
【参考方案2】:如果您查看函数的documentation,它会明确说明可以使用哪些模式字母:
All pattern letters of the Java class java.text.SimpleDateFormat can be used.
您可以在此处查看有效模式:
https://docs.oracle.com/javase/10/docs/api/java/text/SimpleDateFormat.html
看起来Q
不是其中之一。根据 cmets @mck 显示了一个合适的替代方案。
【讨论】:
以上是关于由于阶段失败,Pyspark 作业中止错误的主要内容,如果未能解决你的问题,请参考以下文章
火花作业中的 Azure databricks 群集错误:ExecutorLostFailure
Spark 错误 - 退出状态:143。诊断:容器应请求终止