目前,我使用com.crealytics.spark.excel读取Excel文件,但使用此库,无法将数据集写入Excel文件。
这个链接说,使用hadoop库(org.zuinnote.spark.office.excel),我们可以读写Excel文件
请帮助我在spark .中将数据集对象写入excel文件。
发布于 2017-06-28 14:55:08
您可以使用org.zuinnote.spark.office.excel来使用Dataset读取和写入excel文件。在https://github.com/ZuInnoTe/spark-hadoopoffice-ds/上给出了一些例子。但是,如果在Dataset中读取Excel并尝试将其写入另一个Excel文件,则存在一个问题。请在https://github.com/ZuInnoTe/hadoopoffice/issues/12上查看scala中的问题和解决方法。
我用org.zuinnote.spark.office.excel编写了一个用Java编写的示例程序,并在链接中给出了解决办法。请看看这个是否对你有帮助。
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和Spark2.1.0测试了这段代码。我使用maven并为org.zuinnote.spark.office.excel添加了来自2.11/1.0.3的依赖项
https://stackoverflow.com/questions/44799949
复制相似问题