目前我正在使用com.crealytics.spark.excel來讀取excel文件,但是使用這個庫我無法將數據集寫入到excel文件。 這link說,使用Hadoop辦公室庫(org.zuinnote.spark.office.excel
),我們可以讀取和寫入Excel文件如何將數據集寫入apache文件中使用hadoop office庫的數據集java
請幫我DataSet對象寫在火花的Java Excel文件。
目前我正在使用com.crealytics.spark.excel來讀取excel文件,但是使用這個庫我無法將數據集寫入到excel文件。 這link說,使用Hadoop辦公室庫(org.zuinnote.spark.office.excel
),我們可以讀取和寫入Excel文件如何將數據集寫入apache文件中使用hadoop office庫的數據集java
請幫我DataSet對象寫在火花的Java Excel文件。
您可以使用org.zuinnote.spark.office.excel
來讀寫使用數據集的excel文件。示例見https://github.com/ZuInnoTe/spark-hadoopoffice-ds/。但是,如果您閱讀數據集中的Excel並嘗試將其寫入另一個Excel文件中,則會出現一個問題。請參閱https://github.com/ZuInnoTe/hadoopoffice/issues/12 scala中的問題和解決方法。
我已經用Java編寫了一個示例程序,使用org.zuinnote.spark.office.excel
以及在該鏈接中給出的解決方法。請看看這是否有助於你。
public class SparkExcel {
public static void main(String[] args) {
//spark session
SparkSession spark = SparkSession
.builder()
.appName("SparkExcel")
.master("local[*]")
.getOrCreate();
//Read
Dataset<Row> df = spark
.read()
.format("org.zuinnote.spark.office.excel")
.option("read.locale.bcp47", "de")
.load("c:\\temp\\test1.xlsx");
//Print
df.show();
df.printSchema();
//Flatmap function
FlatMapFunction<Row, String[]> flatMapFunc = new FlatMapFunction<Row, String[]>() {
@Override
public Iterator<String[]> call(Row row) throws Exception {
ArrayList<String[]> rowList = new ArrayList<String[]>();
List<Row> spreadSheetRows = row.getList(0);
for (Row srow : spreadSheetRows) {
ArrayList<String> arr = new ArrayList<String>();
arr.add(srow.getString(0));
arr.add(srow.getString(1));
arr.add(srow.getString(2));
arr.add(srow.getString(3));
arr.add(srow.getString(4));
rowList.add(arr.toArray(new String[] {}));
}
return rowList.iterator();
}
};
//Apply flatMap function
Dataset<String[]> df2 = df.flatMap(flatMapFunc, spark.implicits().newStringArrayEncoder());
//Write
df2.write()
.mode(SaveMode.Overwrite)
.format("org.zuinnote.spark.office.excel")
.option("write.locale.bcp47", "de")
.save("c:\\temp\\test2.xlsx");
}
}
我已經用Java 8和Spark 2.1.0測試了這段代碼。我使用maven和org.zuinnote.spark.office.excel
從https://mvnrepository.com/artifact/com.github.zuinnote/spark-hadoopoffice-ds_2.11/1.0.3
我們無法將標題信息添加到我們正在編寫的excel中 是否有任何選項可以編寫標題來輸出excel文件,請幫助我做到這一點 –
如何創建數據集 - 通過讀取現有文件或新建使用模式的日期集?如果讀取現有文件,則第一行可能是標題。你可以請一個單獨的問題,詳細信息和示例代碼。 – abaghel
我只是想通知您,當前的HadoopOffice庫1.0.4支持讀/寫頭文件以及使用簡單數據類型將文件讀入數據框(參見https://github.com/ZuInnoTe/spark-hadoopoffice- DS)。 1.0.4中的其他一些值得注意的事情是基於Apache POI的事件和流式API支持用於編寫(包括圖表等)以及以低佔用空間模式(具有低內存/ CPU佔用空間)的讀/寫模板。 –
添加依賴關係csv有什麼問題? – mtoto
CSV文件不支持少數格式 (例如:如果單個單元格包含逗號或其他特殊字符,則會將該單個單元格分割爲多個單元格)。 因此,我需要寫一個excel文件,有沒有什麼辦法可以用Apache Spark做同樣的事情? - –
使用現有工具,可以將數據保存到Hive,然後使用Hue下載/生成Excel文件。您也可以查看Hue實際提供此Excel文件的邏輯。 –