SparkSQL DataFrame があります。
このデータの一部のエントリは空ですが、NULL または NA のようには動作しません。どうすればそれらを削除できますか? 何か案は?
RI ではそれらを簡単に削除できますが、sparkR では S4 システム/メソッドに問題があると言われています。
ありがとう。
SparkSQL DataFrame があります。
このデータの一部のエントリは空ですが、NULL または NA のようには動作しません。どうすればそれらを削除できますか? 何か案は?
RI ではそれらを簡単に削除できますが、sparkR では S4 システム/メソッドに問題があると言われています。
ありがとう。
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
SparkR ではNA
との区別がないことに注意してください。NaN
データ フレーム全体に対する操作を好む場合は、およびを含む一連の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
どちらも列の一部のサブセット ( cols
) のみを考慮するように調整でき、dropna
いくつかの追加の便利なパラメーターがあります。たとえば、null 以外の列の最小数を指定できます。
> 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
これは最善の回避策ではありませんが、それらを文字列としてキャストすると、「NaN」として格納され、フィルター処理できます。簡単な例を次に示します。
testFrame <- createDataFrame(sqlContext, data.frame(a=c(1,2,3),b=c(1,NA,3)))
testFrame$c <- cast(testFrame$b,"string")
resultFrame <- collect(filter(testFrame, testFrame$c!="NaN"))
resultFrame$c <- NULL
これにより、列 b の要素が欠落している行全体が省略されます。