Я создал этот минимальный рабочий пример. Сначала он создает фрейм данных, и нам нужна простая функция для работы с искровыми рабочими.
# test spatial analysis on spark via sparklyr
require(sparklyr)
require(dplyr)
# spark configuration
conf <- spark_config()
conf$`sparklyr.shell.driver-memory` <- "2G"
conf$spark.memory.fraction <- 0.8
# start connection to spark
sc <- spark_connect(master = "local", config = conf, version = "2.2.0")
# create a simmple spatial object
# points taken from google maps >> WGS 84
# GPS latitude ong 52 longitude ongeveer 5
p1 <- c(51.9077783,4.4815503,0.0000000)
p2 <- c(51.906471,4.4833524,15.0000000)
p3 <- c(51.9077888,4.4747269,5.0000000)
df <- as.data.frame(rbind(p1,p2,p3))
names(df) <- c("lat","long","z")
df$id <- rownames(df)
# convert to spatial data
require(sp)
# function to run on spark
myTransform <- function (df) {
require(sp) ## <<< UPDATE
WGScoor<- df
coordinates(WGScoor)=~long+lat
# add projection
proj4string(WGScoor)<- CRS("+proj=longlat +datum=WGS84")
return(WGScoor)
}
sp.df <- myTransform(df)
# load data to spark
mysdf <- sdf_copy_to(sc,df, overwrite=TRUE)
#df3 <- sdf_copy_to(sc,sp.df, overwrite=TRUE)
# nu op spark
# sdf_len(sc, 10) %>% spark_apply(function(df) df * 10
df_loc <- mysdf %>% spark_apply(myTransform, packages = c("sp") ) %>%
collect()
# disconnect
spark_disconnect()
Мне известно, что возвращаемый объект - это пространственный фрейм данных, а не искровой СДР, поэтому я не ожидаю, что он еще полностью запустится.
Мой первый вопрос :
ОБНОВЛЕНИЕ : добавление require (sp) в функцию решает эту проблему
Как правильно передать пакет sp рабочему искру?
Журнал показывает:
18/08/27 14:36:50 ERROR sparklyr: RScript (9000) terminated unexpectedly: could not find function "coordinates<-"
18/08/27 14:36:50 ERROR sparklyr: Worker (9000) failed to complete R process
(18/08/27 14:36:50 ERROR sparklyr: Worker (9000) failed to run rscript: ,java.lang.Exception: sparklyr worker rscript failure with status 255, check worker logs for details.)
Так что, по-видимому, он не может найти функцию 'координаты', которая мне кажется, что пакеты 'sp' недоступны ...
Второй вопрос :
Как мне преобразовать пространственный фрейм данных в RDD в искре, который содержит пространственные детали данных? Теперь он возвращает обычный фрейм данных, куда делалось преобразование в пространственный фрейм данных?
В последнем приложении мне нужно создать файлы форм и сохранить их непосредственно в hdfs ...