stringr로 sparklyr mutate 동작
Nov 24 2020
나는 sparklyr를 사용하여 쪽모이 세공 파일을 처리하려고합니다.
테이블은 구조입니다.
type : str | type : str | type : str 키 | requestid | 조작
코드를 실행 중입니다.
txt %>%
select(key, requestid, operation) %>%
mutate(object = stringr::str_split(key, '/', simplify=TRUE) %>% dplyr::last() )
여기서 txt는 유효한 스파크 프레임입니다.
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))
어떤 아이디어가 잘못 되었습니까?
답변
edog429 Dec 01 2020 at 02:05
이 질문은 여기서 다소 다루어졌습니다 .
불행히도 stringr는 sparklyr와 직접 호환되지 않는다고 생각합니다. 그러나 일반적으로 수행하려는 작업은 몇 가지 방법으로 해결할 수 있습니다.
- 하위 문자열 명령으로. 휴식 전에 오는 문자열의 일부 (이 경우 '')와 그 이후에 오는 부분을 취할 수 있습니다. 예 :
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))"))
- 배열을 사용하면 '분할'을 사용하여 열을 요소 목록으로 분리 한 다음 각 요소를 열로 만들 수 있습니다. 예 :
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"))