/ / Čítanie veľkého počtu súborov Excel do Apache Spark - java, python-3.x, hadoop, apache-spark, pyspark

Čítanie veľkého počtu súborov programu Excel do Apache Spark - java, python-3.x, hadoop, apache-spark, pyspark

V HDFS je uložených 100 súborov Excel (* .xlsx). 100 * .xlsx súbory sú usporiadané do 10 adresárov, ako je uvedené nižšie:

/user/cloudera/raw_data/dataPoint1/dataPoint.xlsx
/user/cloudera/raw_data/dataPoint2/dataPoint.xlsx
...
..
.
/user/cloudera/raw_data/dataPoint10/dataPoint.xlsx

Čítanie v jednom zo súborov * .xlsx zhora pomocou

rawData = sc.textFile("/user/cloudera/raw_data/dataPoint1/dataPoint.xlsx")

hodil bláznivé dáta!

Jedným zrejmým návrhom, ktorý som dostal, bolo použitie internetu gnumeric nazýva sa obslužný program príkazového riadku tabuľky ssconvert:

$ ssconvert dataPoint.xlsx dataPoint.csv

a potom ho vypíšem do systému HDFS, aby som mohol priamo prečítať súbor * .csv. Ale to nie je to, čo sa snažím vyriešiť alebo je to požiadavka.

Riešenia v Python (najlepšie) a Java ocenili by sme. Som nováčik, takže podrobný návod by bol naozaj užitočný.

Vopred ďakujem.

odpovede:

1 pre odpoveď č. 1

Pomocou nasledujúceho kódu môžete prečítať súbory programu Excel v aplikácii Spark priamo z HDFS pomocou rozhrania Hadoop FileSystem API. Na analyzovanie údajov však musíte implementovať API rozhrania POache Apache

import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf
import java.util.Date
import scala.io.Source
import java.io.{ InputStream, FileInputStream, File }
import org.apache.poi.hssf.usermodel.HSSFWorkbook
import org.apache.poi.ss.usermodel.{ Cell, Row, Workbook, Sheet }
import org.apache.poi.xssf.usermodel._
import scala.collection.JavaConversions._
import org.apache.poi.ss.usermodel.WorkbookFactory
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.Path;
import java.net._

object Excel {
def main(arr: Array[String]) {
val conf = new SparkConf().setAppName("Excel-read-write").setMaster("local[2]")
val sc = new SparkContext(conf)
val fs = FileSystem.get(URI.create("hdfs://localhost:9000/user/files/timetable.xlsx"),new Configuration());
val path=  new Path("hdfs://localhost:9000/user/files/timetable.xlsx");
val InputStream = fs.open(path)
read(InputStream)
}
def read(in:InputStream)={

}
}

metóda read (in: InputStream) je oblasť, v ktorej implementujete rozhranie API rozhrania POI Apache na analýzu údajov.


0 pre odpoveď č. 2

Ak ste ochotní vytvoriť si vlastný zvykKonvertor XLSX na CSV, rozhranie API udalosti POI pre Apache by bolo na tento účel ideálne. Toto API je vhodné pre tabuľky s veľkými pamäťovými stopami. Pozrite sa, o čo ide tu, Tu je príklad Spracovanie XSLX pomocou kódu udalosti XSSF


0 pre odpoveď č. 3

Môžete vyskúšať knižnicu HadoopOffice: https://github.com/ZuInnoTe/hadoopoffice/wiki

Funguje s programom Spark a ak môžete použiť program Spark2API zdroja údajov môžete použiť aj Python. Ak nemôžete použiť rozhranie API zdrojov údajov Spark2, môžete použiť štandardné rozhrania API Spark na čítanie / zápis súborov pomocou formátu HadoopFile, ktorý poskytuje knižnica HadoopOffice.


0 pre odpoveď č. 4

Môžeš použiť Spark Excel Library na priamu konverziu súborov xlsx na dátové rámce. vidieť túto odpoveď s podrobným príkladom.

Od verzie 0.8.4 knižnica nepodporuje streamovanie a načíta všetky zdrojové riadky do pamäte na konverziu.