Spark データフレームの各行には、df
列にタブ区切りの文字列が含まれていますrawFV
。array of 3 strings
タブで分割すると、すべての行が生成されることは既に知っています。これは、次の方法で確認できます。
df.map(row => row.getAs[String]("rawFV").split("\t").length != 3).filter(identity).count()
カウントが実際に であることを確認します0
。
私の質問は次のとおりです。パイプライン API を使用してこれを行うにはどうすればよいですか?
これが私が試したことです:
val tabTok = new RegexTokenizer().setInputCol("rawFV").setOutputCol("tk").setPattern("\t")
val pipeline = new Pipeline().setStages(Array(tabTok))
val transf = pipeline.fit(df)
val df2 = transf.transform(df)
df2.map(row => row.getAs[Seq[String]]("tk").length != 3).filter(identity).count()
と等しくありません0
。
この問題は、欠損値の存在に関係しています。例えば:
のパイプライン コードはRegexTokenizer
、最初の行では 3 つのフィールドを返しますが、2 行目では 2 つしか返しません。一方、最初のコードはどこでも 3 つのフィールドを正しく返します。