У меня есть требование, когда мне нужно запустить 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><?xml version="1.0"?>
<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>
</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, когда я хочу написать его в качестве вывода.Здесь в моем выводе вы можете видеть, что я получаю что-то вроде '<', '>'.Не уверен почему.