2016-12-16 154 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 :( –