Databricks中PySpark运行FPGrowth遇outputRatioThreshold错误求助
错误原因
这个错误来自Databricks内置的Query Watchdog监控机制,它会限制单个Spark Task的输入输出记录比例——当输出记录数是输入的10000倍以上时(默认阈值),就会触发任务取消。你的场景里,某个Task的输入输出比达到了1:235158,远超阈值。
本质原因是FPGrowth生成频繁项集或关联规则时,某部分数据(对应单个Task处理的分区)触发了输出爆炸:比如某个高频单品和大量其他商品组合,生成了远超输入记录数的项集/规则,触发了Databricks的安全限制(防止意外的资源耗尽或无效查询)。
解决方法
调整阈值参数:在代码开头设置更大的输出比例阈值,覆盖默认限制。比如设置为1000000(可根据实际输出规模调整):
spark.conf.set("spark.databricks.queryWatchdog.outputRatioThreshold", "1000000")该设置对当前Spark会话全局生效。
优化FPGrowth参数:通过提高最小支持度或置信度,减少生成的项集/规则数量,从根源控制输出规模。比如:
from pyspark.ml.fpm import FPGrowth # 调高minSupport和minConfidence,过滤掉低频项集和低置信度规则 fpGrowth = FPGrowth(itemsCol="items", minSupport=0.001, minConfidence=0.1) model = fpGrowth.fit(df)具体数值需要结合业务需求测试,逐步找到既能满足分析要求又能控制输出的阈值。
均衡数据分区:如果数据分区不均衡,单个分区包含大量高频交易,导致对应Task输出过载。可以重新分区让数据分布更均匀:
# 根据集群资源调整分区数,比如200 df = df.repartition(200)重新分区后再训练FPGrowth,单个Task处理的数据量更均衡,输出比例会更可控。
内容的提问来源于stack exchange,提问作者Gaurav Kamble
相关产品推荐
相关产品推荐

