別のrddの値に基づいてrddを更新したいとします。私はこれらの3つのアプローチを試してみた: 1.使用が主で 2.使用減算に参加放置し、次いで組合 3.使用マップとそれ他のRDDの値に基づいてRDDを更新する
内部の条件に述べた3つのアプローチは非常に遅いがあれば。
例は次のとおりです。 rdd1には、別のuserIDとproductIDに基づいてrddが含まれています。たとえば、ユーザーIDが0から100の場合、製品IDは0から100までです。最初はすべてのIDが0でなければなりません。 rdd1 = [(1,1,0.0)、(1,2,0.0)、(1,3,0.0)、...、(100,100,0.0)]
次に、rdd2には特定のuserIdsとproductIds。
私が望むのは、それに対応する格付けがないにもかかわらずすべてのuserIdsとproductIdsをコラボレーティブフィルタリング用のマトリックスに含めることです。 Spark MLLibで明示的なALSを使用するには、これを行う必要があります。 0を増やすつもりでない場合、明示的なコードには観察できない値があるシナリオは含まれていないので、無意味な結果が得られます。従って、それらはゼロの代わりに欠落していると考えられる。
要するに、このrddを生成します。 rdd = [(1,1,3.0)、(1,1,0.0)、(1,2,0.0)、...、(100,100,4.0 )]
これは実行時間の点で最も速い方法ですか?私は更新に使用される数百万のエントリを持つ2つのrddを持っています。
は、あなたが書いた実際のコードを共有してください。各キーにどの値を設定すべきかをどのように選択しますか? – Yaron
もっと良い例がありますか?あなたはあいまいです。 –
最初のrdd私は0のすべての値を持っています。私がやっているのは、0のエントリを2番目のrddに追加することです。私はrdd2の値に基づいてrdd1の値を更新する必要があります。 rdd1のキーがrdd2にある場合は、0の代わりにその値を使用する必要があります。 –