sparklyr thay đổi hành vi với stringr
Nov 24 2020
Tôi đang cố gắng sử dụng sparklyr để xử lý tệp sàn gỗ.
bảng có cấu trúc:
loại: str | loại: str | gõ: phím str | yêu cầu | hoạt động
Tôi đang chạy mã:
txt %>%
select(key, requestid, operation) %>%
mutate(object = stringr::str_split(key, '/', simplify=TRUE) %>% dplyr::last() )
trong đó txt là khung tia lửa hợp lệ mà tôi nhận được:
Error in stri_split_regex(string, pattern, n = n, simplify = simplify, : object 'key' not found
Traceback:
1. txt2 %>% select(key, requestid, operation) %>% mutate(object = stringr::str_split(key,
. "/", simplify = TRUE) %>% dplyr::last())
2. withVisible(eval(quote(`_fseq`(`_lhs`)), env, env))
3. eval(quote(`_fseq`(`_lhs`)), env, env)
4. eval(quote(`_fseq`(`_lhs`)), env, env)
5. `_fseq`(`_lhs`)
6. freduce(value, `_function_list`)
7. withVisible(function_list[[k]](value))
8. function_list[[k]](value)
9. mutate(., object = stringr::str_split(key, "/", simplify = TRUE) %>%
. dplyr::last())
10. mutate.tbl_lazy(., object = stringr::str_split(key, "/", simplify = TRUE) %>%
. dplyr::last())
11. partial_eval_dots(dots, vars = op_vars(.data))
12. lapply(dots, function(x) {
. new_quosure(partial_eval(get_expr(x), vars = vars, env = get_env(x)),
. get_env(x))
. })
13. FUN(X[[i]], ...)
14. new_quosure(partial_eval(get_expr(x), vars = vars, env = get_env(x)),
. get_env(x))
15. partial_eval(get_expr(x), vars = vars, env = get_env(x))
16. partial_eval_call(call, vars, env)
17. lapply(call[-1], partial_eval, vars = vars, env = env)
18. FUN(X[[i]], ...)
19. partial_eval_call(call, vars, env)
20. eval_bare(call, env)
21. stringr::str_split(key, "/", simplify = TRUE)
22. stri_split_regex(string, pattern, n = n, simplify = simplify,
. opts_regex = opts(pattern))
bất kỳ ý tưởng những gì là sai?
Trả lời
edog429 Dec 01 2020 at 02:05
Câu hỏi này ít nhiều đã được giải quyết ở đây .
Thật không may, tôi không nghĩ rằng stringr tương thích trực tiếp với sparklyr. Nhưng nói chung những gì bạn đang cố gắng làm có thể được giải quyết theo một vài cách.
- Với các lệnh chuỗi con. Bạn có thể lấy một phần của chuỗi đứng trước dấu ngắt của bạn (trong trường hợp này là '') và sau đó là phần sau. ví dụ
temp <- data.frame(
var1 = c("a_b","a_b")
,var2 = c(1,2)
)
sdf_copy_to(con,temp,"temp", overwrite = TRUE)
a <- sdf_sql(con,"select * from temp")
b <- a %>%
dplyr::mutate(var1_part1 = sql("substr(var1,1,position('_',var1)-1)")
,va1_part2 = sql("substr(var1,position('_',var1)+1,length(var1))"))
- Với một mảng, bạn có thể tách cột thành danh sách các phần tử bằng cách sử dụng 'split' và sau đó biến mỗi phần tử thành một cột. ví dụ
a <- sdf_sql(con,"select * from temp")
b <- a %>%
dplyr::mutate(var1_array = split(var1,'_')) %>%
sdf_separate_column("var1_array", into = c("var1_part1", "var1_part2"))