我有一个SparkSQL DataFrame。

此数据中的某些条目为空,但它们的行为不像NULL或NA。我该如何删除它们?有任何想法吗?

在R中,我可以轻松删除它们,但在sparkR中,它表示S4系统/方法有问题。

谢谢。

最佳答案

SparkR Column提供了一个long list of useful methods,包括isNullisNotNull:

> 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

请记住,SparkR中的NANaN之间没有区别。

如果您希望对整个数据帧进行操作,则可以使用一组NA functions,包括fillnadropna:
> 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

可以将两者都调整为仅考虑某些列子集(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

关于r - 如何在SparkR中处理空条目,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31598611/

10-16 21:30