Как выполнить геопространственный анализ на искре через sparklyr в R - PullRequest
0 голосов
/ 27 августа 2018

Я создал этот минимальный рабочий пример. Сначала он создает фрейм данных, и нам нужна простая функция для работы с искровыми рабочими.

# 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 ...

...