【问题标题】:Sparkr Read/Write with HDFSSparkr 使用 HDFS 读/写
【发布时间】:2026-01-12 06:20:09
【问题描述】:

我试图弄清楚如何在 SparkR 中向 HDFS 读取和写入任意文件。

设置是:

args <- commandArgs(trailingOnly = T)
MASTER <- args[1]
SPARK_HOME <- args[2]
INPATH <- 'hdfs/path/to/read/or/load/from'
OUTPATH <- 'hdfs/path/to/write/save/to'

Sys.setenv(SPARK_HOME = SPARK_HOME) 
.libPaths(c(file.path(Sys.getenv('SPARK_HOME'), 'R', 'lib'), .libPaths())
library(SparkR)

sparkR.session(master = MASTER)

# How to load RData?
load(paste(INPATH, rObjects.RData, sep = '')

# How to read data?
dat <- read.csv(paste(INPATH, datafile.csv, sep = '')

# Perform operations.....

# How to write?
write.csv(dat, paste(OUTPATH, outdata.csv, sep = '')

我知道这些过程可以通过 shell 脚本或 R 中的类似系统调用来完成,例如:

system('hadoop fs -copyToLocal ...')

但是,我有意避免使用这些解决方案。

Spark v. 2.0.1

R v. 3.3.2

编辑: 下面的评论指出这可能是重复的——该问题更具体地涉及读取 csvs(我的问题的一部分),但仍不清楚如何更一般地加载 .RData 或读/写文件。

【问题讨论】:

  • 谢谢。这解决了一个更具体的问题,即如何将 csv 作为 data.frame 加载(我的问题的一部分),但仍不清楚如何加载 .RData 并写入 HDFS
  • Spark 没有合适的阅读器,SparkR 不直接与文件系统交互。

标签: apache-spark hdfs sparkr


【解决方案1】:

要在 SparkR 中读取和写入数据帧,请使用这些

sdf <- read.df(csvPath, "csv", header = "true", inferSchema = "true", na.strings = "NA")
write.df(people, path = "people. csv", source = "csv", mode = "overwrite")

使用 rdd 使用这些

rdd <- SparkR:::textFile(sc = sc,path = "path",minPartitions = 4)
SparkR:::saveAsTextFile(X,"path")

Databricks 有一个很好的包,可以在 SparkR 中处理 csv 文件,link

【讨论】:

  • 感谢您的意见,Manikanta。仍在尝试弄清楚如何从 HDFS 加载 .RData 文件