我正在使用 com.crealytics.spark.excel 包阅读excel文件。 下面是在spark java中读取excel文件的代码。
INNER JOIN
(
SELECT other_model.id, /* more fields,*/ 1 as some_flag
FROM other_model
) as sub on mymodel.other_model_id = sub.id
但我尝试使用相同的(com.crealytics.spark.excel)包将数据集对象写入spark java中的excel文件。
Dataset<Row> SourcePropertSet = sqlContext.read()
.format("com.crealytics.spark.excel")
.option("location", "D:\\5Kto10K.xlsx")
.option("useHeader", "true")
.option("treatEmptyValuesAsNulls", "true")
.option("inferSchema", "true")
.option("addColorColumns", "false")
.load("com.databricks.spark.csv");
但我得到的错误。
java.lang.RuntimeException:com.crealytics.spark.excel.DefaultSource 不允许将create table作为select。
甚至我也尝试使用 org.zuinnote.spark.office.excel 包。 下面是代码。
SourcePropertSet.write()
.format("com.crealytics.spark.excel")
.option("useHeader", "true")
.option("treatEmptyValuesAsNulls", "true")
.option("inferSchema", "true")
.option("addColorColumns", "false").save("D:\\resultset.xlsx");
我在 pom.xml
中添加了以下依赖项 SourcePropertSet.write()
.format("org.zuinnote.spark.office.excel")
.option("write.locale.bcp47", "de")
.save("D:\\result");
但我收到了以下错误。
java.lang.IllegalAccessError:尝试访问方法org.zuinnote.hadoop.office.format.mapreduce.ExcelFileOutputFormat.getSuffix(Ljava / lang / String;)Ljava / lang / String; 来自org.zuinnote.spark.office.excel.ExcelOutputWriterFactory类
请帮我将数据集对象写入spark java中的excel文件。
答案 0 :(得分:1)
您选择的库com.crealytics.spark.excel看起来没有任何与编写 excel文件相关的代码。在其下方使用Apache POI来读取Excel文件,也很少examples。
好消息是CSV是一个有效的Excel文件,您可以使用spark-csv来编写它。您需要像这样更改代码:
sourcePropertySet.write
.format("com.databricks.spark.csv")
.option("header", "true")
.save("D:\\resultset.csv");
请记住,Spark为每个分区生成1个输出文件,您可能希望.repartition(1)
只有一个结果文件。
答案 1 :(得分:0)
您在编写时遇到的错误来自旧版本的HaodoopOffice库。请确保您只有1.0.3或更高版本的1.0.4作为依赖项。你能提供你的构建文件吗?以下应该有效:
SourcePropertSet.write()
.format("org.zuinnote.spark.office.excel")
.option("spark.write.useHeader",true)
.option("write.locale.bcp47", "us")
.save("D:\\result");
HadoopOffice的Spark2数据源版本1.0.4还支持在阅读时推断架构:
Dataset<Row> SourcePropertSet = sqlContext.read()
.format("org.zuinnote.spark.office.excel")
.option("spark.read.useHeader", "true")
.option("spark.read.simpleMode", "true")
.load("D:\\5Kto10K.xlsx");
请注意,建议不要在一个应用程序中根据POI混合使用不同的Excel数据源。