0
ハイブテーブルに格納されたデータからpyspark MLモデルを構築したいと考えています。データは次のようになります。Spark MLの長いテーブルからフィーチャを集める方法
ID | value
---+------
1 | 100
1 | 101
1 | 102
2 | 101
2 | 103
純粋ハイブを使用して、私は、必要に応じてこのような何かを生産するハイブ配列に値を崩壊しcollect_set
を使用することができます。
ID | value
---+-----------
1 | (100, 101, 102)
2 | (101, 103)
値がカテゴリ機能です。この特定のユースケースについては、それらを1の疎ベクトルへのインデックスとして考えることは問題ありませんが、一般的なカテゴリの解決策を用意するのがよいでしょう。StringIndexer()
私がしたいのは、値を特徴ベクトルに集めて、分類子の1つにフィードすることです。
UDFを使って配列をVectorUDTに変換してからVectorIndexer()でフィーチャリングしようとしましたが、これを試してみると、すべてのベクトルの長さが同じではないという不満がありました。
これらを収集する適切な方法は何ですか?
しかし、それは様々な長さのベクトルを言うことである、私はハイブからそれを得るときと同じ場所で私を残していません:あなたは、あなたが必要とするすべての輸入品のちょうど束であることを気にしない場合フィーチャリングしたくないのですか? –
あなたのudfの 'n'は私の問題を解決します。私はcollect_setの前処理を終了してから、非常にわずかに異なるudf: 'udf(lambda l、maxlen:Vectors.sparse(maxlen、{v for l)}、VectorUDT())を使用しました。これが渡されている配列をソートする必要があります! –