2017-08-26 25 views
2

私は、オプション[DataFrame]を返すメソッドcreateDataFrameを持っています。私は、DataFrameを「取得」し、後のコードで使用したいと考えています。私は私が修正することはできません型の不一致を取得しています:Spark/ScalaのOptionを正しく処理する方法は?

val df2: DataFrame = createDataFrame("filename.txt") match { 
    case Some(df) => { //proceed with pipeline 
     df.filter($"activityLabel" > 0) 
    case None => println("could not create dataframe") 
} 

val Array(trainData, testData) = df2.randomSplit(Array(0.5,0.5),seed = 12345) 

私はタイプであることがDF2必要があります。DATAFRAMEそうでない場合は、後のコードがデータフレームなどとしてDF2を認識しませんval Array(trainData, testData) = df2.randomSplit(Array(0.5,0.5),seed = 12345)
ただし、case NoneステートメントはDataFrameタイプではないため、Unitを返します。コンパイルされません。しかし、もし私がdf2の型を宣言しなければ、後のコードはDataFrameとして認識されないのでコンパイルされません。誰かが助けになると思われる修正を提案できれば - これでしばらくの間、サークルの中を回ってきました。ありがとう

答えて

1

必要なものは地図です。 Option[T]の上にマップすると、「Noneの場合は何もしません。そうでなければ、Optionの内容を別のものに変換します。このコンテンツはデータフレームそのものです。このmyDFOpt.map()の内部では、すべてのデータフレームの変換を入れて、ちょうど最後にあなたがNoneを持っている場合は、あなたが何かを印刷することができますがしたパターンマッチングを行うことができます

編集:@Chobeatに答えるため

val df2: DataFrame = createDataFrame("filename.txt").map(df=>{ 
val filteredDF=df.filter($"activityLabel" > 0) 

val Array(trainData, testData) = filteredDF.randomSplit(Array(0.5,0.5),seed = 12345)}) 
+0

おかげで、あなたは表示することができます。私は何を意味しますか?いくつかのコード例を教えてください。ありがとう! – LucieCBurgess

+0

私は小さなサンプルを追加しましたが、現在私はverifに時間がありませんy it。しかし、私が何を意味したのかは明らかです。 – Chobeat

+0

オプション[A]のmapはオプション[A]を再び与えるので、最初の2行はコンパイルされません –

関連する問題