Ole*_*sen 8 r apache-spark sparkr apache-spark-1.4
我有一个SparkSQL DataFrame.
此数据中的某些条目为空,但它们的行为不像NULL或NA.我怎么能删除它们?有任何想法吗?
在RI中可以很容易地删除它们,但在sparkR中它表示S4系统/方法存在问题.
谢谢.
zer*_*323 13
SparkR Column提供了一长串有用的方法,包括isNull和isNotNull:
> people_local <- data.frame(Id=1:4, Age=c(21, 18, 30, NA))
> people <- createDataFrame(sqlContext, people_local)
> head(people)
Id Age
1 1 21
2 2 18
3 3 NA
> filter(people, isNotNull(people$Age)) %>% head()
Id Age
1 1 21
2 2 18
3 3 30
> filter(people, isNull(people$Age)) %>% head()
Id Age
1 4 NA
Run Code Online (Sandbox Code Playgroud)
请记住,有没有区别NA,并NaN在SparkR.
如果您更喜欢对整个数据帧进行操作,则有一组NA函数,包括fillna和dropna:
> fillna(people, 99) %>% head()
Id Age
1 1 21
2 2 18
3 3 30
4 4 99
> dropna(people) %>% head()
Id Age
1 1 21
2 2 18
3 3 30
Run Code Online (Sandbox Code Playgroud)
两者都可以调整为仅考虑列的一些子集(cols),并且dropna具有一些额外的有用参数.例如,您可以指定最小数量的非空列:
> people_with_names_local <- data.frame(
Id=1:4, Age=c(21, 18, 30, NA), Name=c("Alice", NA, "Bob", NA))
> people_with_names <- createDataFrame(sqlContext, people_with_names_local)
> people_with_names %>% head()
Id Age Name
1 1 21 Alice
2 2 18 <NA>
3 3 30 Bob
4 4 NA <NA>
> dropna(people_with_names, minNonNulls=2) %>% head()
Id Age Name
1 1 21 Alice
2 2 18 <NA>
3 3 30 Bob
Run Code Online (Sandbox Code Playgroud)