0

Spark データフレームの各行には、df列にタブ区切りの文字列が含まれていますrawFVarray 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 つのフィールドを正しく返します。

4

1 に答える 1

3

これは予期される動作です。出力に空の文字列が含まれないように、デフォルトminTokenLengthのパラメーターは 1 です。空の文字列を返したい場合は、0 に設定する必要があります。

new RegexTokenizer()
  .setInputCol("rawFV")
  .setOutputCol("tk")
  .setPattern("\t")
  .setMinTokenLength(0)
于 2016-01-06T14:16:46.127 に答える