1
我試圖將管道輸出到不同的目錄中,以便每個目錄的輸出將基於某些ID進行分區。 所以在一個普通的map減少代碼我會使用MultipleOutputs類,我會在減速器中做這樣的事情。如何在Scalding中輸出輸出
protected void reduce(final SomeKey key,
final Iterable<SomeValue> values,
final Context context) {
...
for (SomeValue value: values) {
String bucketId = computeBucketIdFrom(...);
multipleOutputs.write(key, value, folderName + "/" + bucketId);
...
,所以我想一個能做到這一點像這樣在滾燙的
...
val somePipe = Csv(in, separator = "\t",
fields = someSchema,
skipHeader = true)
.read
for (i <- 1 until numberOfBuckets) {
somePipe
.filter('someId) {id: String => (id.hashCode % numberOfBuckets) == i}
.write(Csv(out + "/bucket" + i ,
writeHeader = true,
separator = "\t"))
}
但我覺得你最終會雷丁相同的管道很多次,它會影響到整體性能。
有沒有其他的選擇?
感謝
你能幫忙回答一個相關的燙傷問題嗎?http://stackoverflow.com/questions/28687539/how-to-output-data-with-hive-style-directory - 結構在燙傷 – 2015-02-24 19:24:22
是的,我已經回答了這個問題http://stackoverflow.com/a/28714754/2908547。希望它是有幫助的,最好的 – morazow 2015-02-25 08:55:12