Как загрузить конкретные строки и столбца из таблицы Excel через pyspark в таблицу HIVE? - PullRequest
0 голосов
/ 11 сентября 2018

У меня есть файл Excel с 4 листами. На каждом рабочем листе первые 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 голосов
/ 19 декабря 2018

Например, вы можете использовать библиотеку 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 у вас есть разные варианты: для Spark1.x вы можете использовать файловый формат HadoopOffice, а для Spark 2.x - Spark2 DataSource (последний также будет включать поддержку Python).Смотрите howtos здесь

...