【SPARK】Spark 使用java API读取Excel

过程:

1、添加两个pom

        <!--读取excel文件-->
		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi</artifactId>
			<version>3.10-FINAL</version>
		</dependency>

		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi-ooxml</artifactId>
			<version>3.10-FINAL</version>
		</dependency>

2、使用URL远程连接

        String path = “hdfs://namenode:8020/user/hdfs/test.url”;
        InputStream inputStream = new URL(path).openStream();


//                FileInputStream inputStream = new FileInputStream(path);
//                XSSFWorkbook xssfSheets = new XSSFWorkbook(inputStream);
//                XSSFSheet sheet = xssfSheets.getSheetAt(0);// 取第一个sheet
                Workbook workbook = WorkbookFactory.create(inputStream);
                Sheet sheet = workbook.getSheetAt(0);// 取第一个sheet
                int rowTotal = sheet.getPhysicalNumberOfRows();//总行数

error:上面被注释的代码是出现了如下错误,由于不同版本的excel引起出现不兼容,使用兼容API Workbook已解决

Package should contain a content type part [M1.13]] with root cause

3、开发过程中,还出现了如下错误,是由于没有hdfs的协议头,正常是file:///,https://,所以需要添加协议

java.net.MalformedURLException: unknown protocol: hdfs....

解决办法:

//添加hdfs协议
 URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory());
 InputStream inputStream = new URL(path).openStream();

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Java Spark可以通过以下几种方式读取Excel数据: 1. 使用Apache POI库读取Excel数据,然后将数据转换为Spark DataFrame。 2. 使用Excel DataSource API,这是一个基于Spark SQL的插件,可以直接从Excel中加载数据并生成Spark DataFrame。 3. 使用第三方库,例如DataBricks的excelent或者CData的Excel JDBC驱动程序。 下面是使用Apache POI库读取Excel数据的示例代码: ```java import org.apache.spark.sql.Dataset; import org.apache.spark.sql.Row; import org.apache.spark.sql.SparkSession; import org.apache.spark.sql.types.DataTypes; import org.apache.spark.sql.types.StructField; import org.apache.spark.sql.types.StructType; import org.apache.spark.sql.functions.*; import java.util.ArrayList; import java.util.List; import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class ExcelReader { public static void main(String[] args) { SparkSession spark = SparkSession.builder() .appName("Excel Reader") .master("local[*]") .getOrCreate(); String filePath = "path/to/excel/file.xlsx"; String sheetName = "Sheet1"; // Read Excel file into a Workbook object Workbook workbook = null; try { workbook = new XSSFWorkbook(filePath); } catch (Exception e) { e.printStackTrace(); } // Get the sheet from the workbook Sheet sheet = workbook.getSheet(sheetName); // Get the header row Row headerRow = sheet.getRow(0); // Create a list of StructField objects to define the schema List<StructField> fields = new ArrayList<>(); for (Cell cell : headerRow) { String columnName = cell.getStringCellValue(); StructField field = DataTypes.createStructField(columnName, DataTypes.StringType, true); fields.add(field); } // Create the schema StructType schema = DataTypes.createStructType(fields); // Read the data rows and convert them to Spark Rows List<Row> rows = new ArrayList<>(); for (int i = 1; i <= sheet.getLastRowNum(); i++) { Row row = sheet.getRow(i); List<String> rowValues = new ArrayList<>(); for (Cell cell : row) { rowValues.add(cell.getStringCellValue()); } Row sparkRow = RowFactory.create(rowValues.toArray()); rows.add(sparkRow); } // Create the DataFrame Dataset<Row> df = spark.createDataFrame(rows, schema); // Show the DataFrame df.show(); // Close the workbook try { workbook.close(); } catch (Exception e) { e.printStackTrace(); } } } ``` 注意:这段代码仅适用于读取XLSX格式的Excel文件,如果要读取XLS格式的文件,需要使用HSSF而不是XSSF。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zsigner

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值