使用dplyr关联促销与交易表报错:x和y需共享同一src求助
报错原因
你遇到的错误是因为get_promotions()返回的数据集与get_transactions的数据源不一致——比如一个是本地数据框(data.frame),另一个是数据库远程表(如tbl_dbi类型)。dplyr默认不会自动跨数据源复制数据,因此触发该报错。
解决方法
方法1:在inner_join中启用copy参数
直接在inner_join里设置copy = TRUE,让dplyr自动复制数据以对齐数据源:
get_promotions() %>% filter(display_location == 1) %>% inner_join(get_transactions, by = "product_id", copy = TRUE) %>% summarize(total_sales = sum(sales_value)) %>% arrange(desc(total_sales))
注意:如果数据集规模较大,复制过程会变慢,适合中小体量数据场景。
方法2:提前将远程表转为本地数据框
如果get_transactions是数据库远程表,先通过collect()将其拉取到本地转为数据框,再进行连接:
# 先把远程交易数据拉到本地 local_transactions <- collect(get_transactions) get_promotions() %>% filter(display_location == 1) %>% inner_join(local_transactions, by = "product_id") %>% summarize(total_sales = sum(sales_value)) %>% arrange(desc(total_sales))
这种方式适合需要反复使用交易数据的场景,后续操作速度会更快。
额外排查步骤
可以通过以下代码确认两个数据集的类型,明确数据源差异:
# 查看两个数据集的类型 class(get_promotions()) class(get_transactions)
内容的提问来源于stack exchange,提问作者Issam K
相关产品推荐
相关产品推荐

