RDDの各レコードをHDFSの個々のファイルに書きたいという要件があります。スパーク:RDDの各レコードをHDFSディレクトリの個々のファイルに書き込む
通常のファイルシステムでやったのですが、明らかにHDFSでは機能しません。 書き込みは、ファイルシステムへの書き込みを行う機能である
stream.foreachRDD{ rdd =>
if(!rdd.isEmpty()) {
rdd.foreach{
msg =>
val value = msg._2
println(value)
val fname = java.util.UUID.randomUUID.toString
val path = dir + fname
write(path, value)
}
}
}
。
スパークの中でそれを行う方法はありますか?各レコードについて、私はネイティブにKafka ConnectまたはFlumeのような他のツールを使用せずにHDFSに書き込むことができますか?
EDIT:例えばのためのより多くの説明
: 私DstreamRDDは、次のレコードを持っている場合は、
- ABCD
- EFGH
- IJKL
- MNOP
"abcd"とは異なるファイル、 "efgh"とは異なるファイルなど、レコードごとに異なるファイルが必要です。
私はstreamRDD内でRDDを作成しようとしましたが、RDDのシリアル化ができないため、許可されていないことが分かりました。
あなたはいくつかの方法で行うことができます
解決策を投稿するか、正しいものを受け入れてください。それは、同様の問題を抱えている他の人に役立ちます。 – Explorer
@LiveAndLetLiveこの問題の解決策はまだ見つかりませんでした。前のコメントの1つで述べたように、レコードの保存から、複数のレコードを含むRDD全体の保存に移行しました。だから、この質問はまだ開いています。 –
独自のMultipleTextOutputFormatを使用することができます。この返信を参照してください。https://stackoverflow.com/a/26051042/609597 – softwarevamp