将json文件从S3加载到sparkR数据帧

时间:2017-12-09 07:05:44

标签: sparkr

我将jason文件保存在S3存储桶中。我试图将它们作为数据帧加载到spark R中,我收到错误日志。以下是我的代码。我哪里错了?

devtools::install_github('apache/spark@v2.2.0',subdir='R/pkg',force=TRUE) 

library(SparkR)

sc=sparkR.session(master='local')

Sys.setenv("AWS_ACCESS_KEY_ID"="xxxx", 
       "AWS_SECRET_ACCESS_KEY"= "yyyy", 
       "AWS_DEFAULT_REGION"="us-west-2")


movie_reviews <-SparkR::read.df(path="s3a://bucketname/reviews_Movies_and_TV_5.json",sep = "",source="json")

我已经尝试过s3a,s3n,s3的所有组合,但似乎没有。

我在sparkR控制台中获得了以下错误日志

17/12/09 06:56:06 WARN FileStreamSink:查找元数据目录时出错。 17/12/09 06:56:06错误RBackendHandler:org.apache.spark.sql.api.r.SQLUtils上的loadDF失败 java.lang.reflect.InvocationTargetException

2 个答案:

答案 0 :(得分:0)

对我来说它有效

read.df("s3://bucket/file.json", "json", header = "true", inferSchema = "true", na.strings = "NA")

答案 1 :(得分:0)

@Ankit说应该有用,但如果你想要的东西看起来更像数据帧,你需要使用select语句。即。

rdd<- read.df("s3://bucket/file.json", "json", header = "true", inferSchema = "true", na.strings = "NA")

然后执行printSchema(rdd)查看数据结构。 如果您看到root后面没有数据缩进的内容,您可以继续选择使用&#34;列的名称&#34;你要。如果您看到模式树的分支,则可能需要在select语句中添加headers.blahpayload.blah。像这样:

sdf<- SparkR::select(rdd, "headers.something", "headers.somethingElse", "payload.somethingInPayload", "payload.somethingElse")