Spark XML Parser не записывает вывод в правильном формате - PullRequest
0 голосов
/ 24 сентября 2019

У меня есть требование, когда мне нужно запустить SQL-запрос, получить выходные данные и записать их в формате XML или Json.

Я написал программу для этого, но каким-то образом я не получаю ожидаемый результат.Я представляю свой вывод SQL как 'str' в этом вопросе.В основном мой SQL Stored Proc возвращает строку XML в качестве вывода.

String str = "<?xml version="1.0"?> \n"
            "<ROWSET> \n"
               +"<ROW> \n"
                +"<CTLCORP>001</CTLCORP> \n"
                +"<CTLDIV>05</CTLDIV> \n"
                +"<CTLFAC>2563</CTLFAC> \n"
                +"<CTLVEND_NUM>001878</CTLVEND_NUM> \n"
                +"<CTLVEND_SUB_ACNT>002</CTLVEND_SUB_ACNT> \n"
                +"<CTLCORP_ITEM_CD>75552874</CTLCORP_ITEM_CD> \n"
                +"<CTLSRC_CD>DISC</CTLSRC_CD> \n"
               +"</ROW> \n"
             +"</ROWSET>";


    SparkSession spark = SparkSession.builder().appName("Build a DataFrame from Scratch").master("local[*]")
            .getOrCreate();

    JavaSparkContext sparkContext  = new JavaSparkContext(spark.sparkContext());                                    

    List<String> stringAsList = new ArrayList<String>();
    stringAsList.add(str);

    JavaRDD<Row> rowRDD = sparkContext.parallelize(stringAsList).map((String row) -> {return RowFactory.create(row);});

    // Creates schema
    StructType schema = DataTypes
            .createStructType(new StructField[] { DataTypes.createStructField("value", DataTypes.StringType, false)});      


    Dataset<Row> df = spark.sqlContext().createDataFrame(rowRDD, schema).toDF();
    df.show();              

    df.coalesce(1)
        .write()
        .mode("overwrite")
        .format("com.databricks.spark.xml") 
        .save("./Output/XMLOutput");

    /*
    df.coalesce(1)
        .write()
        .mode("overwrite")      
        .json("./Output/JSONOutput");   
    */

Эта программа выдает вывод, подобный этому, когда я пишу его в формате файла XML.

<ROWS>
    <ROW>
        <value>&lt;?xml version="1.0"?&gt;
    &lt;ROWSET&gt;
     &lt;ROW&gt;
      &lt;CTLCORP&gt;001&lt;/CTLCORP&gt;
      &lt;CTLDIV&gt;03&lt;/CTLDIV&gt;
      &lt;CTLFAC&gt;2563&lt;/CTLFAC&gt;
      &lt;CTLVEND_NUM&gt;001878&lt;/CTLVEND_NUM&gt;
      &lt;CTLVEND_SUB_ACNT&gt;002&lt;/CTLVEND_SUB_ACNT&gt;
      &lt;CTLCORP_ITEM_CD&gt;75552874&lt;/CTLCORP_ITEM_CD&gt;
      &lt;CTLSRC_CD&gt;SSIMS&lt;/CTLSRC_CD&gt;      
     &lt;/ROW&gt;
    &lt;/ROWSET&gt;
    </value>
    </ROW>
</ROWS>    

Ожидаемый вывод вФормат файла XML

<ROWSET> 
                   <ROW> 
                    <CTLCORP>001</CTLCORP> 
                    <CTLDIV>03</CTLDIV> 
                    <CTLFAC>2563</CTLFAC> 
                    <CTLVEND_NUM>001878</CTLVEND_NUM> 
                    <CTLVEND_SUB_ACNT>002</CTLVEND_SUB_ACNT> 
                    <CTLCORP_ITEM_CD>75552874</CTLCORP_ITEM_CD> 
                    <CTLSRC_CD>SSIMS</CTLSRC_CD>                         
                   </ROW> 
                  </ROWSET>

Может кто-нибудь подсказать, что я здесь не так делаю?Мне нужно иметь правильные теги XML, когда я хочу написать его в качестве вывода.Здесь в моем выводе вы можете видеть, что я получаю что-то вроде '<', '>'.Не уверен почему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...