在 sparkR 中读取一个 csv 文件,其中列有空格
Read a csv file in sparkR where columns have spaces
通常情况下,当我们在 R 中读取 csv 文件时,space 会自动转换为 '.'
> df <- read.csv("report.csv")
> str(df)
'data.frame': 598 obs. of 61 variables:
$ LR.Number
$ Vehicle.Number
然而,当我们在 sparkR 中读取同一个 csv 文件时,space 保持不变,不会被 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)
因此,对列执行任何 activity 会造成很多麻烦,需要像这样调用
head(select(df, df$`LR Number`))
我该如何明确处理这个问题? sparkR 如何隐式处理这个问题。
我使用的是sparkR 1.5.0版本
作为解决方法,您可以使用以下伪代码
colnames_df<-colnames(df)
colnames_df<-gsub(" ","_",colnames_df)
colnames(df)<-colnames_df
另一种解决方案是将文件保存在某处并使用 read.df()
读取
以下对我有用
df = collect(df)
colnames_df<-colnames(df)
colnames_df<-gsub(" ","_",colnames_df)
colnames(df)<-colnames_df
df <- createDataFrame(sqlContext, df)
printSchema(df)
这里需要先在本地采集数据,将spark data frame转为普通的R data frame。我怀疑这是否是一个好的解决方案,因为我不想叫对方付费。但是我调查发现,即使要使用 ggplot 库,我们也需要将其转换为本地数据框
通常情况下,当我们在 R 中读取 csv 文件时,space 会自动转换为 '.'
> df <- read.csv("report.csv")
> str(df)
'data.frame': 598 obs. of 61 variables:
$ LR.Number
$ Vehicle.Number
然而,当我们在 sparkR 中读取同一个 csv 文件时,space 保持不变,不会被 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)
因此,对列执行任何 activity 会造成很多麻烦,需要像这样调用
head(select(df, df$`LR Number`))
我该如何明确处理这个问题? sparkR 如何隐式处理这个问题。
我使用的是sparkR 1.5.0版本
作为解决方法,您可以使用以下伪代码
colnames_df<-colnames(df)
colnames_df<-gsub(" ","_",colnames_df)
colnames(df)<-colnames_df
另一种解决方案是将文件保存在某处并使用 read.df()
读取以下对我有用
df = collect(df)
colnames_df<-colnames(df)
colnames_df<-gsub(" ","_",colnames_df)
colnames(df)<-colnames_df
df <- createDataFrame(sqlContext, df)
printSchema(df)
这里需要先在本地采集数据,将spark data frame转为普通的R data frame。我怀疑这是否是一个好的解决方案,因为我不想叫对方付费。但是我调查发现,即使要使用 ggplot 库,我们也需要将其转换为本地数据框