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

时间:2017-06-28 10:28:05

标签: java excel apache-spark apache-spark-sql spark-dataframe

目前我正在使用 com.crealytics.spark.excel 来读取excel文件,但是使用此库我无法将数据集写入excel文件。 这个link表示使用hadoop office library(org.zuinnote.spark.office.excel)我们可以读取和写入excel文件

请帮我将数据集对象写入spark java中的excel文件。

1 个答案:

答案 0 :(得分:2)

您可以使用foo = function(X = all_points){ plot(X) chull_inds = chull(X) extreme_points = X[chull_inds,] points(extreme_points, pch = 19, col = "red") centroid = t(sapply(1:NROW(extreme_points), function(i) c(mean(extreme_points[-i,1]), mean(extreme_points[-i,2])))) distances = sapply(1:NROW(extreme_points), function(i) dist(rbind(extreme_points[i,], centroid[i,]))) points(extreme_points[which.max(distances),], pch = 18, cex = 2) points(X[chull_inds[which.max(distances)],], cex = 5) return(X[chull_inds[which.max(distances)],]) } set.seed(42) all_points = data.frame(x = rnorm(25), y = rnorm(25)) foo(X = all_points) # x y #18 -2.656455 0.7581632 来使用数据集读取和写入Excel文件。示例在https://github.com/ZuInnoTe/spark-hadoopoffice-ds/给出。但是,如果您在数据集中读取Excel并尝试将其写入另一个Excel文件,则会出现一个问题。请在https://github.com/ZuInnoTe/hadoopoffice/issues/12处查看scala中的问题和解决方法。

我使用org.zuinnote.spark.office.excel编写了一个Java示例程序,并在该链接中给出了解决方法。请看看这对你有帮助。

org.zuinnote.spark.office.excel

我已经使用Java 8和Spark 2.1.0测试了这段代码。我正在使用maven并从https://mvnrepository.com/artifact/com.github.zuinnote/spark-hadoopoffice-ds_2.11/1.0.3

添加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"); } } 的依赖项