#sparkr
#sparkr
Вопрос:
Запуск Spark 2.0 локально
df <- data.frame(a = c("$0.00 ", "$601.19 ", "$601.19 ", "$238.58 "),
b = c("$148.81 ", "$396.85", "$24.37 ", "$24.37 "),
c = c("$238.58 ", "$211.15 ", "$422.30 ", "$150.30")
)
ddf <- as.DataFrame(df)
Я хочу запустить что-то вроде этого
ddf2 <- dapply(ddf, function(x) { regexp_replace(x, "\$|,", "")}, schema(ddf))
но он возвращает ошибку
head(ddf2)
ERROR Executor: Exception in task 0.0 in stage 13.0 (TID 13)
org.apache.spark.SparkException: R computation failed with
Error in (function (classes, fdef, mtable) :
unable to find an inherited method for function ‘regexp_replace’ for signature ‘"data.frame", "character", "character"’
Ответ №1:
Использование dapply
:
ddf2 <- dapply(ddf, function(x) { as.data.frame(apply(x, MARGIN=2, function(y) gsub("\$|,", "", y, perl=TRUE)), stringsAsFactors = FALSE) } , schema(ddf))
dapply
ожидает R data.frame в качестве вывода анонимной функции.
regexp_replace
Метод ожидает SparkDataFrame Column
в качестве входных данных.
Пример без dapply
(заменяет только значения a
столбца):
withColumn(ddf,'a', regexp_replace(ddf$a, "\$|,", ""))