从 sparlyr tibble 对象读取数据时访问列时出错
Posted
技术标签:
【中文标题】从 sparlyr tibble 对象读取数据时访问列时出错【英文标题】:Error in accessing columns while reading data from sparlyr tibble objects 【发布时间】:2020-06-28 20:27:30 【问题描述】:我正在尝试通过此链接在 spark 中复制 ALS 的基本示例:
https://rdrr.io/cran/sparklyr/man/ml_als.html
movies <- data.frame(
user = c(1, 2, 0, 1, 2, 0),
item = c(1, 1, 1, 2, 2, 0),
rating = c(3, 1, 2, 4, 5, 4)
)
movies_tbl <- sdf_copy_to(sc, movies)
model <- ml_als(movies_tbl, rating ~ user + item)
ml_predict(model, movies_tbl)
ml_recommend(model, type = "item", 1)
这段代码对我来说没有问题,问题是我无法操作 预测表中的值具有以下格式:
prediction = ml_recommend(model, type = "item", 1)
> prediction
# Source: spark<?> [?? x 4]
user recommendations item rating
<int> <list> <int> <dbl>
1 1 <list [2]> 2 3.98
2 2 <list [2]> 2 4.86
3 0 <list [2]> 0 3.88
我无法选择得到空响应的列
> prediction$prediction
NULL
也不过滤它们:
> prediction %>%
+ select (user)
Error in select(., user) : object 'user' not found
我什至无法以这种方式从原始数据框中读取数据:
movies_tbl %>%
select (user)
这将返回与上述相同的错误。
【问题讨论】:
prediction %>% select(user)
和 movies_tbl %>% select(user)
为我工作。您是否正确执行了sc <- spark_connect(master = "local")
并加载了 dplyr?
【参考方案1】:
当使用 R 中的 Spark 时,您可以使用 (1) SQL 通过例如DBI 包,或 (2) dplyr 包。您不能使用基本 R 函数,例如使用 $
进行子集化。
# Using DBI
dbGetQuery(sc, "SELECT count(*) FROM movies")
count(1)
1 6
# Using dplyr
select(prediction, user)
# Source: spark<?> [?? x 1]
user
<int>
1 2
2 0
3 1
要将数据取回 R,请使用 sparklyr 中的 collect()
函数。
【讨论】:
以上是关于从 sparlyr tibble 对象读取数据时访问列时出错的主要内容,如果未能解决你的问题,请参考以下文章
Tibbles 拒绝 lubridate 的持续时间和周期对象
将 bigquery JSON 数据转储加载到 R tibble
Tidymodels:在 R 中进行 10 倍交叉验证后,从 TIbble 中取消最佳拟合模型的 RMSE 和 RSQ 值