读取sparkR中的csv文件,其中列包含空格

时间:2016-12-16 10:12:30

标签: r csv apache-spark sparkr

通常,当我们在R中读取csv文件时,空格会自动转换为'。'

> df <- read.csv("report.csv")
> str(df)
'data.frame':   598 obs. of  61 variables:
 $ LR.Number   
 $ Vehicle.Number   

然而,当我们在sparkR中读取相同的csv文件时,空间保持不变并且不会被spark隐式处理

#To read a csv file
df <- read.df(sqlContext, path = "report.csv", source = "com.databricks.spark.csv", inferSchema = "true", header="true")
printSchema(df)

root
 |-- LR Number: string (nullable = true)
 |-- Vehicle Number: string (nullable = true)

因此,使用该列执行任何活动会导致很多麻烦,需要像这样调用

head(select(df, df$`LR Number`))

我该如何明确处理这个? sparkR如何隐式处理这个问题。

我使用的是sparkR 1.5.0版本

2 个答案:

答案 0 :(得分:1)

作为一种解决方法,你可以使用下面的伪代码

colnames_df<-colnames(df)
colnames_df<-gsub(" ","_",colnames_df)

colnames(df)<-colnames_df

另一个解决方案是将文件保存到某处并使用read.df()

进行读取

答案 1 :(得分:1)

以下为我工作

df = collect(df)
colnames_df<-colnames(df)
colnames_df<-gsub(" ","_",colnames_df)
colnames(df)<-colnames_df
df <- createDataFrame(sqlContext, df)
printSchema(df)

这里我们需要首先在本地收集数据,这会将火花数据帧转换为普通的R数据帧。我怀疑这是否是一个很好的解决方案,因为我不想打电话给收集。然而,我调查并发现即使使用ggplot库我们也需要将其转换为本地数据框