簡體   English   中英

實木復合地板寫入期間發生Spark ClosedChannelException異常

[英]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

基於這個答案,我想我的代碼中會有異常,但是我不確定它在哪里,因為這是一個相當簡單的代碼。 如何進一步調試此異常? 日志沒有任何問題,也沒有揭示原因。

問題是由於以下錯誤引起的,而不是與火花無關的。。。由於火花不太擅長顯示錯誤,因此將其追捕非常麻煩。 真是的

'0000-00-00 00:00:00'不能表示為java.sql.Timestamp錯誤

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM