У меня есть требование для создания XML, который имеет структуру ниже
<parent>
<name>parent</name
<childs>
<child>
<name>child1</name>
</child>
<child>
<name>child1</name>
<grandchilds>
<grandchild>
<name>grand1</name>
</grandchild>
<grandchild>
<name>grand2</name>
</grandchild>
<grandchild>
<name>grand3</name>
</grandchild>
</grandchilds>
</child>
<child>
<name>child1</name>
</child>
</childs>
</parent>
Как видите, у родителя будут дочерние элементы, а у дочернего узла могут быть узлы внуков.
https://github.com/databricks/spark-xml#conversion-from-dataframe-to-xml
Я понимаю из spark-xml, что когда у нас есть структура вложенного массива, фрейм данных должен быть таким, как показано ниже
+------------------------------------+
| a|
+------------------------------------+
|[WrappedArray(aa), WrappedArray(bb)]|
+------------------------------------+
Не могли бы вы помочь мне с этим небольшим примером того, как создать плоский DataFrame для моего желаемого XML.Я работаю над Spark 2.X Spark-Xml 0.4.5 (Последняя версия)
Моя схема
StructType categoryMapSchema = new StructType(new StructField[]{
new StructField("name", DataTypes.StringType, true, Metadata.empty()),
new StructField("childs", new StructType(new StructField[]{
new StructField("child",
DataTypes.createArrayType(new StructType(new StructField[]{
new StructField("name", DataTypes.StringType, true, Metadata.empty()),
new StructField("grandchilds", new StructType(new StructField[]{
new StructField("grandchild",
DataTypes.createArrayType(new StructType(new StructField[]{
new StructField("name", DataTypes.StringType, true,
Metadata.empty())
})), true, Metadata.empty())
}), true, Metadata.empty())
})), true, Metadata.empty())
}), true, Metadata.empty()),
});
Данные RDD моей строки .. Не фактический код, но в некоторой степени похож наthis.
final JavaRDD<Row> rowRdd = mapAttributes
.map(parent -> {
return RowFactory.create(
parent.getParentName(),
RowFactory.create(RowFactory.create((Object) parent.getChild))
);
});
То, что я пробовал до сих пор, у меня есть WrappedArray в родительском WrappedArray, который не работает.