2017-01-20 12 views
1

私はいくつかの列を持つデータフレームを持っています。分析を行う前に、そのデータフレームの完成度を知りたいので、データフレームをフィルタリングしたい各列の非ヌル値の数をカウントし、場合によってはデータフレームを戻します。Spark DataFrameのnull以外の値の数を数えます

基本的に、私はthis questionで表現と同じ結果を達成しようとしているが、Scalaの代わりにPythonのを使用しています...

は、あなたが持っていると言う:

val row = Row("x", "y", "z") 
val df = sc.parallelize(Seq(row(0, 4, 3), row(None, 3, 4), row(None, None, 5))).toDF() 

どのように非の数をまとめることができます各列に対して-nullを指定し、同じ数の列と答えがある単一行のデータフレームを返しますか?

+0

おかげで非常にミューあなたが提案するロジックをよりよく理解するためにいくつかのスニペットを共有することができれば感謝します。これを行うためのUDFを書くことができますが、各列に対してUDFを実行するコードを書く方法はわかりません。 – user299791

答えて

1

を非NULL値の数だけはあまり教えてくれないので、「あなたのような何かを行うことができます

...、ヌル値の割合で、より興味がある:

import org.apache.spark.sql.functions.{sum,when} 

df.agg(
    sum(when($"x".isNotNull,0).otherwise(1)).divide(sum(when($"x".isNotNull,1).otherwise(1))).as("x : fraction null"), 
    sum(when($"y".isNotNull,0).otherwise(1)).divide(sum(when($"y".isNotNull,1).otherwise(1))).as("y : fraction null"), 
    sum(when($"z".isNotNull,0).otherwise(1)).divide(sum(when($"z".isNotNull,1).otherwise(1))).as("z : fraction null") 
).show() 
+1

@ user299791インポートについては忘れてください –

5

一つまっすぐ進むオプションがカウント行が非NULL値の数を含み、データフレームの概要、取得するには.describe()機能を使用することです:私は、多くの場合、私はPsidomsの答えを好むが、

df.describe().filter($"summary" === "count").show 
+-------+---+---+---+ 
|summary| x| y| z| 
+-------+---+---+---+ 
| count| 1| 2| 3| 
+-------+---+---+---+ 
+0

これは数値列に対してのみ機能し、文字列に対しては機能しません...右ですか? – user299791

+0

Hmm。確かに。これは数値列に対してのみ機能します。 – Psidom

関連する問題