通常,当我们在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版本
答案 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库我们也需要将其转换为本地数据框