स्ट्रिंग के साथ स्पार्कली म्यूट व्यवहार

Nov 24 2020

मैं एक लकड़ी की छत फ़ाइल को संसाधित करने के लिए स्पार्कलीर का उपयोग करने की कोशिश कर रहा हूं।

तालिका संरचना की है:

प्रकार: str | प्रकार: str | प्रकार: str कुंजी | निवेदन | ऑपरेशन

मैं कोड चला रहा हूं:

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

इस प्रश्न को कमोबेश यहाँ संबोधित किया गया है ।

मुझे नहीं लगता कि स्ट्रिंग सीधे दुर्भाग्य से स्पार्कलीर के साथ संगत है। लेकिन सामान्य तौर पर आप जो करने की कोशिश कर रहे हैं उसे कुछ तरीकों से हल किया जा सकता है।

  1. घटिया कमांड के साथ। आप अपने ब्रेक से पहले आने वाले स्ट्रिंग के एक हिस्से को ले सकते हैं (इस मामले में '') और उसके बाद आने वाले हिस्से को। जैसे
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))"))
  1. एक सरणी के साथ आप कॉलम को 'स्प्लिट' का उपयोग करके तत्वों की एक सूची में अलग कर सकते हैं और फिर प्रत्येक तत्व को एक कॉलम में बना सकते हैं। जैसे
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"))