1

我必须在火花数据框中的每个分区的文件中执行记录计数,然后我必须将输出写入xml文件。将火花数据帧中每个分区的记录写入一个xml文件

这是我的数据框。

dfMainOutputFinalWithoutNull.coalesce(1).write.partitionBy("DataPartition","StatementTypeCode") 
    .format("csv") 
    .option("nullValue", "") 
    .option("header", "true") 
    .option("codec", "gzip") 
    .save("s3://trfsdisu/SPARK/FinancialLineItem/output") 

现在我不得不阴户无记录在每个分区中的每个文件,然后写输出到一个XML文件

我这是怎么试图做

val count =dfMainOutputFinalWithoutNull.groupBy("DataPartition","StatementTypeCode").count 

    count.write.format("com.databricks.spark.xml") 
    .option("rootTag", "items") 
    .option("rowTag", "item") 
    .save("s3://trfsdisu/SPARK/FinancialLineItem/Descr") 

我我能够打印每个分区的记录总数和打印,但当我试图创建XML文件,我越来越低于错误。

java.lang.ClassNotFoundException: Failed to find data source: com.databricks.spark.xml. Please find packages at http://spark.apache.org/third-party-projects.html 

我使用Spark 2.2.0, Zeppelin 0.7.2

所以我一定要导入com.databricks.spark.xml这一点,但为什么因为CSV文件的情况下,如果我没有进口com.databricks.spark.csv

问题2:我可以使用缓存dfMainOutputFinalWithoutNull,因为我将使用两次来写它的数据,然后计算其分区记录,然后在XML文件中写?

而且我加入这个依赖

<!-- https://mvnrepository.com/artifact/com.databricks/spark-xml_2.10 --> 
<dependency> 
    <groupId>com.databricks</groupId> 
    <artifactId>spark-xml_2.10</artifactId> 
    <version>0.2.0</version> 
</dependency> 

并重新解释,然后我得到了以下错误

java.lang.NullPointerException 
    at org.apache.zeppelin.spark.Utils.invokeMethod(Utils.java:38) 
    at org.apache.zeppelin.spark.Utils.invokeMethod(Utils.java:33) 
    at org.apache.zeppelin.spark.SparkInterpreter.createSparkContext_2(SparkInterpreter.java:391) 
    at org.apache.zeppelin.spark.SparkInterpreter.createSparkContext(SparkInterpreter.java:380) 
    at org.apache.zeppelin.spark.SparkInterpreter.getSparkContext(SparkInterpreter.java:146) 

回答

0

我会回答我的问题

所以我说下面依赖于齐柏林

Scala 2.11 

groupId: com.databricks 
artifactId: spark-xml_2.11 
version: 0.4.1 

在zepplin中加入以下内容

com.databricks:spark-xml_2.11:0.4.1 

然后我就可以创建文件了。