我有一个包含 4 个工作表的 excel 文件。每个工作表的前 3 行为空白,即数据从第 4 行开始,并继续数千行。 注意:根据要求,我不应该删除空白行。
我的目标如下
1) read the excel file in spark 2.1
2) ignore the first 3 rows, and read the data from 4th row to row number 50. The file has more than 2000 rows.
3) convert all the worksheets from the excel to separate CSV, and load them to existing HIVE tables.
备注:我可以灵活地为每个工作表编写单独的代码。
我怎样才能做到这一点?
我可以创建一个 Df 来读取单个文件并将其加载到 HIVE。但我想我的要求需要的不止这些。
例如,您可以使用HadoopOffice库(https://github.com/ZuInnoTe/hadoopoffice/wiki(。
您有以下选项:
1( 直接使用 Hive 读取 Excel 文件并将 CTAS 读取到 CSV 格式的表中 您需要部署HadoopOffice Excel Serde https://github.com/ZuInnoTe/hadoopoffice/wiki/Hive-Serde 然后你需要创建表(请参阅文档了解所有选项,该示例从 sheet1 读取并跳过前 3 行(
create external table ExcelTable(<INSERTHEREYOURCOLUMNSPECIFICATION>) ROW FORMAT SERDE 'org.zuinnote.hadoop.excel.hive.serde.ExcelSerde' STORED AS INPUTFORMAT 'org.zuinnote.hadoop.office.format.mapred.ExcelFileInputFormat' OUTPUTFORMAT 'org.zuinnote.hadoop.excel.hive.outputformat.HiveExcelRowFileOutputFormat' LOCATION '/user/office/files' TBLPROPERTIES("hadoopoffice.read.simple.decimalFormat"="US","hadoopoffice.read.sheet.skiplines.num"="3", "hadoopoffice.read.sheet.skiplines.allsheets"="true", "hadoopoffice.read.sheets"="Sheet1","hadoopoffice.read.locale.bcp47"="US","hadoopoffice.write.locale.bcp47"="US");
然后将CTAS转换为CSV格式表:
create table CSVTable ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' AS Select * from ExcelTable;
2( 使用火花 根据 Spark 版本,您有不同的选择: 对于Spark 1.x,您可以使用HadoopOffice文件格式,对于Spark 2.x,您可以使用Spark2 DataSource(后者还包括对Python的支持(。在此处查看操作方法