我有一个SparkSQL DataFrame。
此数据中的某些条目为空,但它们的行为不像NULL或NA。我怎么能删除它们?有任何想法吗?
在R中我可以很容易地删除它们但是在sparkR中它表示S4系统/方法存在问题。
感谢。
答案 0 :(得分:12)
SparkR列提供long list of useful methods,其中包括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
请注意,SparkR中NA
和NaN
之间没有区别。
如果您更喜欢对整个数据框进行操作,则会有一组NA functions,其中包括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
可以调整两者以仅考虑列的某些子集(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
答案 1 :(得分:2)
这不是最好的解决方法,但如果将它们转换为字符串,它们将被存储为&#34; NaN&#34;然后你可以过滤它们,一个简短的例子:
o.add = function (display) {
var defer = $q.defer();
var config = { contentType: 'application/json' };
$http.post('api/apiFood' + display, config).success(function (data) {
defer.resolve(data);
});
return defer.promise;
};
这省略了b列中元素缺失的整行。