Как удалить '\' из строки в sparklyr - PullRequest
0 голосов
/ 03 сентября 2018

Я использую sparklyr и у меня есть искровой фрейм данных со столбцом word, который содержит слова, некоторые из которых содержат специальные символы, которые я хочу удалить. Мне удалось использовать regepx_replace и \\\\ перед специальными символами, вот так:

words.sdf <- words.sdf %>% 
  mutate(word = regexp_replace(word, '\\\\(', '')) %>% 
  mutate(word = regexp_replace(word, '\\\\)', '')) %>% 
  mutate(word = regexp_replace(word, '\\\\+', '')) %>% 
  mutate(word = regexp_replace(word, '\\\\?', '')) %>%
  mutate(word = regexp_replace(word, '\\\\:', '')) %>%
  mutate(word = regexp_replace(word, '\\\\;', '')) %>%
  mutate(word = regexp_replace(word, '\\\\!', ''))

Теперь я хочу удалить \. Я пробовал оба:

words.sdf <- words.sdf %>% 
  mutate(word = regexp_replace(word, '\\\\\', ''))

и:

words.sdf <- words.sdf %>% 
  mutate(word = regexp_replace(word, '\', ''))

Но ни один не будет работать ...

1 Ответ

0 голосов
/ 03 сентября 2018

Вы должны исправить свой код для экранирования как на стороне R, так и на стороне Java, так что на самом деле вам нужно "\\\\\\\\":

df <- copy_to(sc, tibble(word = "(abc\\zyx: 1)"))

df %>% mutate(regexp_replace(word, "\\\\\\\\", ""))
# Source:   lazy query [?? x 2]
# Database: spark_shell_connection
  word           `regexp_replace(word, "\\\\\\\\\\\\\\\\", "")`
  <chr>          <chr>                                         
1 "(abc\\zyx:1)" (abczyx: 1)  

В зависимости от ваших точных требований может быть проще сопоставить все символы одновременно. Например, вы можете сохранить только слова (\w) и пробелы (\s):

df %>% mutate(regexp_replace(word, "[^\\\\w+\\\\s+]", ""))
# Source:   lazy query [?? x 2]
# Database: spark_shell_connection
  word            `regexp_replace(word, "[^\\\\\\\\w+\\\\\\\\s+]", "")`
  <chr>           <chr>                                                
1 "(abc\\zyx: 1)" abczyx 1     

или только слово символов

df %>% mutate(regexp_replace(word, "[^\\\\w+]", ""))
# Source:   lazy query [?? x 2]
# Database: spark_shell_connection
  word            `regexp_replace(word, "[^\\\\\\\\w+]", "")`
  <chr>           <chr>                                      
1 "(abc\\zyx: 1)" abczyx1  
...