ZBLOG

def saveAsExcel(df: DataFrame, pageSize: Int, filePath: String, fileName: String): Unit = { val outPath = s"$filePath/$fileName" // 创建一个空白的工作簿 val workbook = new XSSFWorkbook() // 获取DataFrame中的数据并转换为二维数组形式 val dataArray = df.c...

要将Excel文件写入HDFS,可以使用org.apache.hadoop.fs.FileSystem来操作HDFS文件系统。以下是对给定函数的修改,以实现将Excel文件写入HDFS:

import org.apache.hadoop.conf.Configuration
import org.apache.hadoop.fs.{FileSystem, Path}
import org.apache.spark.sql.DataFrame
import org.apache.poi.xssf.usermodel.{XSSFRow, XSSFWorkbook}

def saveAsExcel(df: DataFrame, pageSize: Int, filePath: String, fileName: String): Unit = {
  val outPath = s"$filePath/$fileName"
  
  // 创建一个空白的工作簿
  val workbook = new XSSFWorkbook()

  // 获取DataFrame中的数据并转换为二维数组形式
  val dataArray = df.collect().map(_.toSeq.toArray)

  // 计算总页数
  val totalPages = Math.ceil(dataArray.length.toDouble / pageSize).toInt

  // 分页写入不同的sheet页
  for (pageIndex <- 0 until totalPages) {
    // 创建新的sheet页
    val sheet = workbook.createSheet(s"Sheet${pageIndex + 1}")

    // 写入表头
    val headerRow = sheet.createRow(0)
    df.columns.zipWithIndex.foreach { case (column, index) =>
      val cell = headerRow.createCell(index)
      cell.setCellValue(column)
    }

    // 写入数据行
    val startIndex = pageIndex * pageSize
    val endIndex = Math.min(startIndex + pageSize, dataArray.length)
    for (rowIndex <- startIndex until endIndex) {
      val rowData = dataArray(rowIndex)
      val dataRow = sheet.createRow(rowIndex - startIndex + 1)
      rowData.zipWithIndex.foreach { case (value, columnIndex) =>
        val cell = dataRow.createCell(columnIndex)
        val cellValue = Option(value).map(_.toString).getOrElse("")
        cell.setCellValue(cellValue)
      }
    }
  }

  // 将工作簿保存到HDFS中
  val hadoopConf = new Configuration()
  val hdfs = FileSystem.get(hadoopConf)
  
  createHdfsPathIfNotExists(outPath) // 自定义函数,用于创建HDFS路径(如果不存在)
  
  val outputStream = hdfs.create(new Path(s"$outPath.xlsx"))
  workbook.write(outputStream)
  outputStream.close()

  // 关闭工作簿
  workbook.close()
}

请注意,你需要根据你的实际情况来设置HDFS配置,并根据需要创建createHdfsPathIfNotExists函数来确保输出路径存在。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:http://sdn.0voice.com/?id=5103

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?