[英]Spark ClosedChannelException exception during parquet write
我們有這個龐大的舊版sql表,我們需要從中提取數據並將其推送到s3。 以下是我查詢部分數據並寫入輸出的方式。
def writeTableInParts(tableName: String, numIdsPerParquet: Long, numPartitionsAtATime: Int, startFrom : Long = -1, endTo : Long = -1, filePrefix : String = s3Prefix) = {
val minId : Long = if (startFrom > 0) startFrom else findMinCol(tableName, "id")
val maxId : Long = if (endTo > 0) endTo else findMaxCol(tableName, "id")
(minId until maxId by numIdsPerParquet).toList.sliding(numPartitionsAtATime, numPartitionsAtATime).toList.foreach(list => {
list.map(start => {
val end = math.min(start + numIdsPerParquet, maxId)
sqlContext.read.jdbc(mysqlConStr,
s"(SELECT * FROM $tableName WHERE id >= ${start} AND id < ${end}) as tmpTable",
Map[String, String]())
}).reduce((left, right) => {
left.unionAll(right)
})
.write
.parquet(s"${filePrefix}/$tableName/${list.head}-${list.last + numIdsPerParquet}")
})
}
對於許多不同的表,此方法效果很好,但是無論出於何種原因,無論我縮小掃描窗口或縮小大小如何,表都將繼續獲取java.nio.channels.ClosedChannelException
。
基於這個答案,我想我的代碼中會有異常,但是我不確定它在哪里,因為這是一個相當簡單的代碼。 如何進一步調試此異常? 日志沒有任何問題,也沒有揭示原因。
問題是由於以下錯誤引起的,而不是與火花無關的。。。由於火花不太擅長顯示錯誤,因此將其追捕非常麻煩。 真是的
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.