如何通过pyspark从Excel工作表中加载特定的行和列到HIVE表?

时间:2018-09-11 08:29:40

标签: pyspark apache-spark-2.2

我有一个包含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。但是我想我的需求将不仅仅如此。

1 个答案:

答案 0 :(得分:1)

例如,您可以使用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行)

router

然后CTAS进入CSV格式表:

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");

2)使用Spark 根据Spark版本,您有不同的选择: 对于Spark 1.x,可以使用HadoopOffice文件格式,对于Spark 2.x,可以使用Spark2 DataSource(后者也包括对Python的支持)。请参阅howtos here