マップ操作内から直列化不可能なJavaオブジェクトを使用する必要があります。ドライバで最初に初期化しようとすると、「タスクはシリアル化できません」というエラーが表示されます。最適なオプションは、各分割に対してそれを宣言することですが、オブジェクトの初期化はHDFSからいくつかのファイルを読み込みます。それを可能にするには、私は労働者(NullPointerException)で利用できないように見えるsc.hadoopConfiguration変数が必要です。作業員のHDFSから読み込む直列化不可能なオブジェクトを初期化する
労働者側のHDFSから読むことはできますか?もしそうなら、私はmapPartitionsを使って各パーティションのオブジェクトを初期化することができます。そうでない場合、最良のアプローチは何ですか?
、あなたのオブジェクトを設定するには、HDFSからどのくらいのデータを読んでいますか?私は多くの場合、ドライバ内で構成データを収集し、文字列の配列を作成します。私はScalaを使用しますが、シングルトンオブジェクトを作成し、エグゼキュータコード内のどこにでも、Array of Stringsを引数として渡すオブジェクトを使用します。初期化されていない場合は、文字列の配列で初期化されます。既に初期化されている場合は、文字列の配列を無視して、あなたがしたいことを何でもします。このようにすると、パーティションごとに気にする必要はありません。実行者ごとに1回しか発生しません。 –
良いアプローチ。私はこれを@zsxwingが提供する答えにマージしようとします。ありがとうございました! – Miguel