#r #apache-spark #apache-spark-sql #cloudera #sparklyr
#r #apache-spark #apache-spark-sql #cloudera #sparklyr
Вопрос:
Я пытаюсь переместить код R в spark с помощью sparklyr, я сталкиваюсь с проблемами с некоторыми функциями, чтобы выполнить следующие действия:
-Подсчитайте общее количество слов в строке: например, word = «Привет, как дела», количество слов: 4 -Подсчитайте общее количество символов в первом слове: например: word = «Привет, как дела», количество символов в первом слове: 5
-Подсчитать общее количество символов в первом слове: например: word= «Привет, как дела» , количество символов во втором слове: 3
Я пробовал с помощью пакетов dpylr и stringr, но не могу получить то, что мне нужно.
Я подключаюсь к сеансу spark
install.packages("DBI")
install.packages("ngram")
require(DBI)
require(sparklyr)
require(dplyr)
require(stringr)
require(stringi)
require(base)
require(ngram)
# Spark Config
config <- spark_config()
config$spark.executor.cores <- 2
config$spark.executor.memory <- "4G"
spark <- spark_connect(master = "yarn-client",version = "2.3.0",app_name = "Test", config=config)
Затем я пытаюсь получить некоторые данные с помощью инструкции SQL
test_query<-sdf_sql(spark,"SELECT ID, NAME FROM table.name LIMIT 10")
NAME <- c('John Doe','Peter Gynn','Jolie Hope')
ID<-c(1,2,3)
test_query<-data.frame(NAME,ID) # ( this is the example data, here it is in R data frame, but I have on a Spark Data Frame)
Когда я пытаюсь выполнить разработку функций, я получаю ошибку в последней строке
test_query<-test_query %>%
mutate(Total_char=nchar(NAME))%>% # this works good
mutate(Name_has_numbers=str_detect(NAME,"[[:digit:]]"))%>% # Works good
mutate(Total_words=str_count(NAME, '\w ')) # I got an error
Сообщение об ошибке, которое я получаю, выглядит следующим образом: Ошибка: org.apache.spark.sql.AnalysisException: неопределенная функция: ‘STR_COUNT’. Эта функция не является ни зарегистрированной временной функцией, ни постоянной функцией, зарегистрированной в базе данных «по умолчанию».
-Подсчитайте общее количество слов в строке: например, word = «Привет, как дела», количество слов: 4 -Подсчитайте общее количество символов в первом слове: например: word = «Привет, как дела», количество символов в первом слове: 5
-Подсчитать общее количество символов в первом слове: например: word= «Привет, как дела» , количество символов во втором слове: 3
Комментарии:
1. пожалуйста, добавьте сообщение об ошибке к вашему вопросу, чтобы у нас было лучшее представление о том, что вызывает вашу проблему.
2. если вы измените
nchar(NAME)
nchar(as.character(NAME))
свой код, все будет хорошо3. Действительно, точно так же, как @JilberUrbina сказал, что ваш код был правильным. Вам просто нужно добавить
nchar(as.character(NAME))
, и это должно работать правильно. Джилбер Урбина, я предлагаю вам добавить свой комментарий к ответу, поскольку он решает проблему OP.4. Просто обратите внимание, что у вас обоих, ребята, одинаковые фамилии, и я впервые это услышал, ха-ха.
5. Сообщение об ошибке, которое я получаю, выглядит следующим образом: Ошибка: org.apache.spark.sql.AnalysisException: неопределенная функция: ‘STR_COUNT’. Эта функция не является ни зарегистрированной временной функцией, ни постоянной функцией, зарегистрированной в базе данных «по умолчанию». @JilberUrbina на самом деле строка, которая не работает, это такая: mutate(Total_words=str_count(NAME, ‘\ w ‘))
Ответ №1:
> library(tidyverse)
> test_query %>%
mutate(NAME = as.character(NAME),
word_count = str_count(NAME, "\w "), # Count the total number of words in a row
N_char_first_word = nchar((gsub("(\w ).*", "\1", NAME))) #Count the total number of character in the first word
)
NAME ID word_count N_char_first_word
1 John Doe 1 2 4
2 Peter Gynn 2 2 5
3 Jolie Hope 3 2 5
Комментарии:
1. Кажется, что gsub и str_count не работают с sparklyr, у меня возникает эта ошибка
Error: org.apache.spark.sql.AnalysisException: Undefined function: 'GSUB'. This function is neither a registered temporary function nor a permanent function registered in the database 'default'