首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用中的hadoop office库将数据集写入excel文件

如何使用中的hadoop office库将数据集写入excel文件
EN

Stack Overflow用户
提问于 2017-06-28 10:28:05
回答 1查看 2K关注 0票数 4

目前,我使用com.crealytics.spark.excel读取Excel文件,但使用此库,无法将数据集写入Excel文件。

这个链接说,使用hadoop库(org.zuinnote.spark.office.excel),我们可以读写Excel文件

请帮助我在spark .中将数据集对象写入excel文件。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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编写的示例程序,并在链接中给出了解决办法。请看看这个是否对你有帮助。

代码语言:javascript
复制
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的依赖项

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44799949

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档