1

非常に単純ですが、私はArray [Row]を持っており、データセット[Row]またはDataFrameに変換したいと思います。Spark(Scala):配列[行]をDataSet [行]またはDataFrameにするにはどうすればいいですか?

私はどのように行の配列を考えましたか?

まあ、私は私のデータセットからNULL値をクリアしようとしていた。

  • なし.naを使用してせずに、各列(私はたくさんある)と...
  • をフィルタリングすること.drop()関数からDataFrameNaFunctionsセルが実際に文字列 "null"を検出しないため、機能しません。

したがって、すべての列でnullを除外するために次の行を考えました。

問題は、outDFは配列[行]です。したがって、問題です。任意のアイデアを歓迎!

答えて

3

私はコメントを投稿しています。それだけで、実際の `null`なのでを '` null'`をドロップしていないよう

df.na.drop(df.columns).where("'null' not in ("+df.columns.mkString(",")+")") 
+0

はこれが見えます。これは望ましい動作ですか? –

+0

'na.drop(df.columns)' 'null' – mrsrinivas

+1

' .where(df.columns.map(c => col(c)!== "null")文字列からwhere部分を抽出することができます。 .reduce(_ and _)) ' –

3

これは、それが働いていた場合、あなたのコードはどうなるのかです:

inputDF.columns.map { 
    col => inputDF.filter((inputDF(col) =!= "") and (inputDF(col) =!= "null")) 
}.reduce(_ union _) 

と、このような何か:

inputDF.where(inputDF.columns.map { 
    col => (inputDF(col) =!= "") and (inputDF(col) =!= "null") 
}.foldLeft(lit(true))(_ and _)) 

は、あなたが望むものです。最初のソリューションは、このようなデータとなる非排他的なサブセットを作成すること

注:

val inputDF = Seq(("1", "a"), ("2", ""), ("null", "")).toDF 

結果は次のようになります。私は正しいと信じているソリューションでは

+---+---+ 
| _1| _2| 
+---+---+ 
| 1| a| 
| 2| | 
| 1| a| 
+---+---+ 

+---+---+ 
| _1| _2| 
+---+---+ 
| 1| a| 
+---+---+ 
0

これは、Mr Srinivasのコメントに基づいて次のコードを使用して回答しました。

//First drop all typical nulls 
val prelimDF = inputDF.na.drop() 

//Then drops all columns actually saying 'null' 
val finalDF = prelimDF.na.drop(prelimDF.columns).where("'null' not in ("+prelimDF.columns.mkString(",")+")") 

乾杯!

関連する問題