Просто создайте итератор,
Iterator<Row> rowIterator = w.getWorkbook(blob).getSheetAt(1).iterator;
итерируйте по листу и поместите значения ячеек в 2d массив,
Object[][] tab = new Object[rows][cols];
.iterator () итерирует по строке, внутри этого цикла вы должнысоздайте итератор ячейки, чтобы выполнять итерации по «столбцам».
Object[][] tab = new Object[rows][cols];
Iterator<Row> rowIterator = w.getWorkbook(blob).getSheetAt(1).iterator;
while (rowIterator.hasNext()) {
Row row = rowIterator.next();
// For each row, iterate through all the columns
Iterator<Cell> cellIterator = row.cellIterator();
while (cellIterator.hasNext()) {
Cell cell = cellIterator.next();
// Check the cell type and format accordingly
cell.setCellType(CellType.STRING);
tab[cell.getRowIndex()][cell.getColumnIndex()] = cell.getStringCellValue();
}
}
, а затем преобразуйте ваш 2d-массив в Seq / List / Array of Strings, где String будет объединять элементы строк.На следующем шаге создайте RDD с помощью sc.parallelize, на шаге карты разделите вашу строку и создайте RDD[Row]
.Я буду выглядеть так:
val yourRDD = rdd.map(RowFactory.create(_.split(yourDelimiter)))
, а затем использовать spark.createDataFrame(yourRDD,schema)