Как прочитать объект JSON, который я создал в R, в sparkR

Я хотел бы взять кадр данных, который я создал в R, и превратить его в объект JSON, а затем прочитать этот объект JSON в sparkR. С моим текущим проектом я не могу просто передать кадр данных в SparkR и должен использовать этот обходной метод, чтобы заставить мой проект работать. Я также не могу сначала создать локальный файл JSON для чтения в sparkR, поэтому я пытаюсь создать объект JSON для хранения своих данных, а затем прочитать его в sparkR.

В других сообщениях, которые я читал, в Scala Spark есть функция

sqlContext.read.json(anotherPeopleRDD)

Кажется, это то, чего я пытаюсь достичь. Есть ли что-то подобное для SparkR?

Вот код, с которым я сейчас работаю:

.libPaths(c(.libPaths(), '/root/Spark1.6.2/spark-1.6.2-bin-hadoop2./R/lib'))
Sys.setenv(SPARK_HOME = '/root/Spark1.6.2/spark-1.6.2-bin-hadoop2.6')
Sys.setenv(R_HOME = '/root/R-3.4.1')
.libPaths(c(file.path(Sys.getenv("SPARK_HOME"), "R", "lib"), .libPaths()))
Sys.setenv("spark.r.command" = '/usr/bin')
Sys.setenv(HADOOP_CONF_DIR = "/etc/hadoop/conf.cloudera.yarn")
Sys.setenv(PATH = paste(Sys.getenv(c('PATH')), '/root/Spark1.6.2/spark1.6.2-bin-hadoop2.6/bin', sep=':'))

library(SparkR)
sparkR.stop()
sc <- sparkR.init(sparkEnvir = list(spark.shuffle.service.enabled=TRUE,spark.dynamicAllocation.enabled=TRUE, spark.dynamicAllocation.initialExecutors="2"), master = "yarn-client", appName = "SparkR")
sqlContext <- sparkRSQL.init(sc)
options(warn=-1)
n = 1000
x = data.frame(id = 1:n, val = rnorm(n))

library(RJSONIO)
exportJson <- toJSON(x)
testJsonData = read.json(sqlContext, exportJson) #fails
collect(testJsonData)

remove(sc)
remove(sqlContext)
sparkR.stop()
options(warn=0)

С сообщением об ошибке, которое я получаю для read.json:

17/08/03 12:25:35 ERROR r.RBackendHandler: json on 2 failed
Error in invokeJava(isStatic = FALSE, objId$id, methodName, ...) :java.lang.IllegalArgumentException: java.net.URISyntaxException: Relative path in absolute URI: {

person seanjedi    schedule 03.08.2017    source источник
comment
Конечно, это звучит как очень запутанный способ делать простые вещи...   -  person desertnaut    schedule 04.08.2017


Ответы (1)


Решение этой проблемы заключалось в том, что файлы JSON, с которыми я работал, не поддерживались функцией spark read.json из-за того, как они были отформатированы. Вместо этого мне пришлось использовать другую библиотеку R, jsonlite, для создания файлов JSON, и теперь она работает, как задумано. Вот как это выглядит, когда я создаю файл сейчас:

library(jsonlite)
exportJson <- toJSON(x)
testJsonData = read.json(sqlContext, exportJson) #fails
collect(testJsonData)

Я надеюсь, что это поможет любому!

person seanjedi    schedule 08.08.2017