You need to enable JavaScript to run this app. 如何在sparklyr包中正确运行FPGrowth算法并解决执行报错
优惠活动
大模型
产品
解决方案
定价
更多

如何在sparklyr包中正确运行FPGrowth算法并解决执行报错

核心报错根因
  • 找不到mutate函数:未加载dplyr包的前提下裸写mutate,且之前尝试调用的plyr::mutate、SparkR::mutate并非sparklyr生态适配Spark DataFrame的接口,无法正确触发Spark端的列操作逻辑。
  • Spark表导入冲突:多次重复运行copy_to时未显式传入overwrite = TRUE参数,Spark会话中已存在同名临时表,未设置覆盖逻辑时就会触发导入报错,和使用哪个版本的mutate无直接关联。
  • 模型入参要求:ml_fpgrowth仅接受集合/数组类型的items列作为输入,不支持直接传入单值字符串列。
完整可执行操作流程
set.seed(123)
# 构造原始本地list格式交易数据
li <- list()
for(i in 1:10) li[[i]] <- make.unique(letters[sample(1:26,sample(5:20,1),rep = T)])

# 加载必要依赖,解决函数找不到的问题
library(sparklyr)
library(dplyr)

# 连接本地Spark集群
sc <- spark_connect(master = "local", version = "3.0.1")

# 本地构造符合模型输入格式的tibble,原始list本身就是向量集合,无需额外字符串拆分
local_data <- tibble::tibble(items = li)

# 导入为Spark DataFrame,*补全overwrite参数解决表重复报错*
df <- copy_to(
  sc,
  local_data,
  name = "fp_growth_input",
  overwrite = TRUE
)

# 训练FPGrowth关联规则模型
fp_growth_model <- ml_fpgrowth(
  df,
  items_col = "items",
  min_support = 0.2,
  min_confidence = 0.5
)
字符串格式交易数据的适配方法

如果后续使用的是空格分隔的字符串格式交易数据,按以下流程操作即可避开之前的报错:

# 构造字符串格式测试数据
str_tb <- tibble::tibble(items=c("a b c", "a b", "c f g", "b c"))

# 导入Spark并做列类型转换
str_spark_df <- copy_to(
  sc,
  str_tb,
  name = "str_fp_input",
  overwrite = TRUE
) %>%
  # *统一使用dplyr的mutate做Spark端列操作*
  mutate(items = split(items, "\\s+"))
操作注意事项
  • 所有Spark DataFrame的列操作必须使用dplyr接口,不要交叉调用plyr、SparkR的同名字数,避免函数冲突。
  • 重复运行Spark导入逻辑时,必须在copy_to中设置overwrite = TRUE,否则会反复触发同名表存在的报错。
  • 检查输入模型的items列类型,必须是数组/集合格式,否则会触发模型入参校验报错。

内容的提问来源于stack exchange,提问作者mr.T

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.08 09:15:02