2016-01-25 30 views
0

我已經在R中可用的airconality數據集上應用了以下代碼,它有一些缺失值。我想省略具有NAs的行SparkR-dropna沒有給出想要的輸出

庫(SparkR) Sys.setenv('SPARKR_SUBMIT_ARGS'='「 - packages」「com.databricks:spark-csv_2.10:1.2.0」「sparkr-殼「')

SC < - sparkR.init( 」本地「,sparkHome = 」/Users/devesh/Downloads/spark-1.5.1-bin-hadoop2.6「)

sqlContext < - sparkRSQL .init(sc)

path < - 「/ Users/devesh/work/airquality /」

水溶液< - read.df(sqlContext,路徑源= 「com.databricks.spark.csv」,標題= 「真」,則InferSchema = 「真」)

頭(dropna(水溶液,如何=」任何「))

臭氧Solar_R風溫度月日 1 41 190 7.4 67 10 1 2 36 118 8.0 72 5 2 3 12 149 12.6 74 5 3 4 18 313 11.5 62 5 4 5 NA NA 14.3 56 5 5 6 28 NA 14.9 66 5 6

輸出中仍然存在NAs。 我在這裏錯過了什麼嗎?

回答

0

在天然④短缺值與邏輯恆定,<NA>表示。 SparkR DataFrame使用NULL表示缺少的值。如果使用createDataFrame()將本地R data.frame轉換爲分佈式SparkR DataFrame,則SparkR將自動將<NA>轉換爲NULL。但是,如果通過使用read.df()從文件中讀取數據來創建SparkR DataFrame,則可能會有「NA」字符串,但不是R邏輯常數<NA>缺失值表示形式。字符串「NA」不會自動轉換爲NULL,因此dropna()不會將其視爲缺失值。

如果你在你的CSV 「NA」 的字符串,你可能會進行篩選,而不是使用dropna():

filtered_aq < - 過濾器(水,含水$臭氧= 「NA」 &含水$ Solar_R != 「NA」)

頭(filtered_aq)

+0

感謝您的解釋。那麼我們如何轉換sparkR數據框中的整個「NA」並將其轉換爲NULL? – Devesh

0

我已經使用一個不同的例子供參考用於去除NA

>data_local <- data.frame(Id=1:4, Age=c(40, 52, 25, NA)) 
>data <- createDataFrame(sqlContext, data_local) 

>head(data) 
Id Age 
1 1 40 
2 2 52 
3 3 25 
4 4 NA 

>head(dropna(data,how="any")) 
Id Age 
1 1 40 
2 2 52 
3 3 25 
+0

我認爲這個問題是CSV文件的閱讀。 read.df不考慮CSV文件中的NA – Devesh