2016-12-16 149 views
0

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

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

然而,当我们读sparkR同一csv文件,空间保持不变,不被火花隐式地处理

#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

不确定这是否有帮助,因为分隔符表示每列是如何分开的。这里的列是“,”分隔的,每列都有一个空格。所以我有col1,col2,其中col1是'name1 name2',col2是'name1 name2' –

+0

这个特性在普通的R中会自动处理,尝试读取一个带有空格的列名的csv文件,R会自动插入一个点(。 ) –

+0

设置'header =“true”'和'inferSchema =“false”'跳过名称让它使用内建的或'selectExpr()'支持使用'col_name AS new_col_name',如在这个Python例子中看到的:http://stackoverflow.com/a/34077809/1457051(这可以直接推断出来)。当我使用spark时,我正在使用spark 2.x运行'sparklyr',所以我不想用旧的spark版本测试'sparkR'。您还可以使用'sql()'将CSV导入到SQL中,如https://github.com/databricks/spark-csv的“SQL”部分所示(您可以在'CREATE TABLE '电话)。 – hrbrmstr

回答

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库,我们也需要将其转换成本地数据帧。

1

作为变通,你可以使用下面这段代码的伪

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

colnames(df)<-colnames_df 

另一个解决方案是保存在某个地方的文件和读取使用read.df( )

+0

函数' colnames(df)'返回NULL :( –