如何使用SparkR从HDFS加载数据?

时间:2017-08-08 13:27:20

标签: hdfs sparkr

我是Hadoop和Spark的新手。我正在使用Spark-2.1.1-bin-hadoop2.7。使用SparkR我想从Hadoop 2.7.3 HDFS加载(读取)数据。

我知道,我可以使用“hdfs:// somepath-to-my-file”指向我的Hadoop文件,但是我找不到SparkR中的函数来完成这项工作。 read.df()不起作用。

我使用sparkR.session()连接到我的Spark会话。 为了启动Spark的R接口,我从spark的bin位置运行sparkR。

简而言之,我想使用sparkR从HDFS加载csv文件。

请帮忙。如果可能,请提供示例。

谢谢, SG

3 个答案:

答案 0 :(得分:0)

Using spark dataFrame to load data from HDFS

将数据框转换为RDD:

converted.rdd <- SparkR:::toRDD(dataframe)

答案 1 :(得分:0)

我无法找到错误的解决方案,请分享您执行的代码(完全给出启动sparkR&amp;读取csv文件的方式)

解决方案将是。

Option A:
# reading the file stored in local not in HDFS but in R
R_dataframe <- read.csv(file="mydata/train.csv", header=TRUE, sep=",")
#Note(If the file is too big it cant hold as it depends on RAM size, 
so u can increase the driver memory while starting sparkR 
by ".bin/sparkR --driver-memory 12g")

#convert R dataframe to sparkR dataframe:
sparkR_dataframe <- as.DataFrame(R_dataframe)

Option B:
Read it in Python as RDD from HDFS and save as parquet file.
#convert RDD to dataframe
df = rdd.toDF()
#save df as parquet file.
df.write.parquet("train.parquet")
#In sparkR session read the file:
train_df <- read.parquet("train.parquet")

答案 2 :(得分:0)

解决方案是在read.df()和loadDF()中提及“source”参数。以下是我的步骤:

#step1: launch hadoop standalone (using start-dfs.cmd and start-yarn.cmd)
#step2: launch spark standalone just by typing sparkR
#step3: run following command to load a csv file from HDFS
myfile <- read.df(path="hdfs://localhost:9000/mydata/train.csv", source="csv")

#step4: print few lines from myfile
head(myfile)

请注意,在我的代码中,我的train.csv文件位于HDFS的mydata目录中。 函数read.df()和loadDF()工作正常。 整个设置在Windows8.1中有以下内容:

  1. Hadoop 2.7.3(独立)
  2. Spark 2.2.0(独立)
  3. R 3.3.3 x64
  4. Java版本1.8.0_144
  5. 感谢。