在 Spark(R) 中进行计算
Doing Calculations In Spark(R)
我正在使用 sparklyr
库。
我有一个变量,wtd
,我将其复制到 spark:
copy_to(sc,wtd)
colnames(wtd) <- c("a","b","c","d","e","f","g")
然后我想进行计算并将其存储在 spark 中,而不是在我的 R 环境中。
当我尝试时:
sdf_register(wtd %>% group_by(c,b) %>% filter(row_number()==1) %>%count(d), "wtd2")
Error in UseMethod("sdf_register") :
no applicable method for 'sdf_register' applied to an object of class "c('tbl_df', 'tbl', 'data.frame')"
命令 wtd2 = wtd %>% group_by(c,b) %>% filter(row_number()==1) %>%count(d)
工作正常,但会将其存储在我的环境中,而不是 spark 中。
您的操作序列中的第一个参数应该是 "tbl_spark",而不是常规的 data.frame
。你的命令,
wtd2 = wtd %>% group_by(c,b) %>% filter(row_number()==1) %>%count(d)
有效,因为您根本没有使用 Spark,只是普通的 R data.frames。
如果你想将它与 spark 一起使用,首先,存储在复制 data.frame
:
时返回的 spark_tbl
变量
colnames(wtd) <- c("a","b","c","d","e","f","g")
wtd_tbl <- copy_to(sc, wtd)
然后,您可以使用 sdf_register(wtd_tbl %>% ..., "wtd2")
.
执行您的数据管道
如果你按照定义执行管道,你会得到一个异常说:
Error: org.apache.spark.sql.AnalysisException: Window function rownumber() requires window to be ordered
这是因为要在 Spark 中使用 row_number()
,首先需要提供一个 "order function"。你可以用 arrange()
得到这个。我假设您希望您的行按 "c" 和 "b" 列排序,因此您的最终管道将如下所示:
sdf_register(wtd_tbl %>%
dplyr::group_by(c, b) %>%
arrange(c, b) %>%
dplyr::filter(row_number() == 1) %>%
dplyr::count(d),
"wtd2")
希望对您有所帮助。
我正在使用 sparklyr
库。
我有一个变量,wtd
,我将其复制到 spark:
copy_to(sc,wtd)
colnames(wtd) <- c("a","b","c","d","e","f","g")
然后我想进行计算并将其存储在 spark 中,而不是在我的 R 环境中。
当我尝试时:
sdf_register(wtd %>% group_by(c,b) %>% filter(row_number()==1) %>%count(d), "wtd2")
Error in UseMethod("sdf_register") : no applicable method for 'sdf_register' applied to an object of class "c('tbl_df', 'tbl', 'data.frame')"
命令 wtd2 = wtd %>% group_by(c,b) %>% filter(row_number()==1) %>%count(d)
工作正常,但会将其存储在我的环境中,而不是 spark 中。
您的操作序列中的第一个参数应该是 "tbl_spark",而不是常规的 data.frame
。你的命令,
wtd2 = wtd %>% group_by(c,b) %>% filter(row_number()==1) %>%count(d)
有效,因为您根本没有使用 Spark,只是普通的 R data.frames。
如果你想将它与 spark 一起使用,首先,存储在复制 data.frame
:
spark_tbl
变量
colnames(wtd) <- c("a","b","c","d","e","f","g")
wtd_tbl <- copy_to(sc, wtd)
然后,您可以使用 sdf_register(wtd_tbl %>% ..., "wtd2")
.
如果你按照定义执行管道,你会得到一个异常说:
Error: org.apache.spark.sql.AnalysisException: Window function rownumber() requires window to be ordered
这是因为要在 Spark 中使用 row_number()
,首先需要提供一个 "order function"。你可以用 arrange()
得到这个。我假设您希望您的行按 "c" 和 "b" 列排序,因此您的最终管道将如下所示:
sdf_register(wtd_tbl %>%
dplyr::group_by(c, b) %>%
arrange(c, b) %>%
dplyr::filter(row_number() == 1) %>%
dplyr::count(d),
"wtd2")
希望对您有所帮助。