내 테이블 [col1, col2, key1, col3, txn_id, dw_last_updated]에 아래 열이 있습니다. 이 txn_id 중에서 key1은 기본 키 열입니다. 내 데이터 세트에서 (txn_id, key) 조합에 대해 여러 레코드를 가질 수 있습니다. 그 기록들 중에서 dw_last_updated를 기반으로 최신 하나를 골라야합니다.Apache SPARK GroupByKey alternate
나는 이것을 논리로 사용하고 있습니다. 나는 지속적으로 메모리 문제에 부딪 히고 있으며 groupByKey() 때문에 부분적으로는 믿습니다 ... 더 좋은 대안이 있습니까?
case class Fact(col1: Int,
col2: Int,
key1: String,
col3: Int,
txn_id: Double,
dw_last_updated: Long)
sc.textFile(s3path).map { row =>
val parts = row.split("\t")
Fact(parts(0).toInt,
parts(1).toInt,
parts(2),
parts(3).toInt,
parts(4).toDouble,
parts(5).toLong)
}).map { t => ((t.txn_id, t.key1), t) }.groupByKey(512).map {
case ((txn_id, key1), sequence) =>
val newrecord = sequence.maxBy {
case Fact_Cp(col1, col2, key1, col3, txn_id, dw_last_updated) => dw_last_updated.toLong
}
(newrecord.col1 + "\t" + newrecord.col2 + "\t" + newrecord.key1 +
"\t" + newrecord.col3 + "\t" + newrecord.txn_id + "\t" + newrecord.dw_last_updated)
}
의견/제안을 감사합니다 ...
나에게 좋을 것 같은데, 두렵다. 더 많은 파티션을 시도 할 수 있습니다. 하지만 아마도 더 많은 기계가 필요할 것입니다. –
아직 해결되지 않았습니까? – maasg