为什么 SparkR-dropna 没有给我想要的输出?
Why is SparkR-dropna not giving me the desired output?
我在 R 中可用的空气质量数据集上应用了以下代码,它有一些缺失值。我想省略具有 NAs
的行
library(SparkR)
Sys.setenv('SPARKR_SUBMIT_ARGS'='"--packages" "com.databricks:spark-csv_2.10:1.2.0" "sparkr-shell"')
sc <- sparkR.init("local",sparkHome = "/Users/devesh/Downloads/spark-1.5.1-bin-hadoop2.6")
sqlContext <- sparkRSQL.init(sc)
path<-"/Users/devesh/work/airquality/"
aq <- read.df(sqlContext,path,source = "com.databricks.spark.csv", header="true", inferSchema="true")
head(dropna(aq,how="any"))
Ozone Solar_R Wind Temp Month Day
1 41 190 7.4 67 5 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
NA 仍然存在于输出中。
我在这里遗漏了什么吗?
我使用了一个不同的示例供您参考删除 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
原生 R 中的缺失值用逻辑常量 <NA>
表示。 SparkR DataFrames 用 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 <- filter(aq, aq$Ozone != "NA" & aq$Solar_R != "NA")
head(filtered_aq)
我在 R 中可用的空气质量数据集上应用了以下代码,它有一些缺失值。我想省略具有 NAs
的行library(SparkR)
Sys.setenv('SPARKR_SUBMIT_ARGS'='"--packages" "com.databricks:spark-csv_2.10:1.2.0" "sparkr-shell"')
sc <- sparkR.init("local",sparkHome = "/Users/devesh/Downloads/spark-1.5.1-bin-hadoop2.6")
sqlContext <- sparkRSQL.init(sc)
path<-"/Users/devesh/work/airquality/"
aq <- read.df(sqlContext,path,source = "com.databricks.spark.csv", header="true", inferSchema="true")
head(dropna(aq,how="any"))
Ozone Solar_R Wind Temp Month Day 1 41 190 7.4 67 5 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
NA 仍然存在于输出中。 我在这里遗漏了什么吗?
我使用了一个不同的示例供您参考删除 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
原生 R 中的缺失值用逻辑常量 <NA>
表示。 SparkR DataFrames 用 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 <- filter(aq, aq$Ozone != "NA" & aq$Solar_R != "NA")
head(filtered_aq)