拼花地板写入过程中出现Spark ClosedChannelException异常



我们有一个庞大的遗留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

基于这个答案,我想我的代码中有一个异常,但我不确定它会在哪里,因为它是一个相当简单的代码。如何进一步调试此异常?日志中没有任何异常,也没有透露原因。

问题是由于以下错误引起的,与火花无关。。。由于spark不太善于显示错误,因此追查这个问题非常麻烦。Darn。。。

';0000-00-00 00:00:00';不能表示为java.sql.Timestamp错误

相关内容

  • 没有找到相关文章

最新更新