Spark-Xml: массив внутри массива в Dataframe для генерации XML

У меня есть требование создать 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 строки .. Не фактический код, но что-то вроде этого.

final JavaRDD<Row> rowRdd = mapAttributes
      .map(parent -> {
        return RowFactory.create(
        parent.getParentName(),
        RowFactory.create(RowFactory.create((Object) parent.getChild))
        );

      });

То, что я пробовал до сих пор, у меня есть WrappedArray в родительском WrappedArray, который не работает.


comment
Spark - не лучший инструмент для создания единой сложной файловой структуры XML. Он очень хорош для распределенной обработки между рабочими и объединяет результаты в 1 или несколько файлов на основе строк / столбцов. Ваш XML - это очень вложенная глубокая структура. Почему вы используете Spark?   -  person Tom Lous    schedule 24.04.2018
comment
Кроме того ... Какова даже базовая структура фрейма данных / файла, которую вы пытаетесь преобразовать в этот XML? Можете ли вы показать (часть) фрейма данных?   -  person Tom Lous    schedule 24.04.2018
comment
@TomLous у нас есть искровой проект для генерации большого фида для seo. наши данные - от ста до пятисот тысяч. С такими большими данными и файлом, который нужно сгенерировать. Я нашел искру-xml решением.   -  person Punith Raj    schedule 25.04.2018
comment
sc.createDataFrame (rowRDD, categoryMapSchema) .... моя rowRDD и настраиваемая схема показаны выше в вопросе.   -  person Punith Raj    schedule 25.04.2018
comment
500 тыс. Строк - это много, что нужно сделать вручную, но обычный сценарий Java / Scala (при наличии достаточного количества времени) также может выдать желаемый результат. Я действительно не думаю, что Spark - лучшее решение. Если вы настаиваете, вы должны опубликовать суть с фактическим кодом и данными образца (ввод), потому что мне слишком сложно экстраполировать то, что вы здесь поместили   -  person Tom Lous    schedule 26.04.2018
comment
@TomLous извините, это не 500 тыс. Строк. Но это 500К узловых элементов. Размер файлов составляет от 500 МБ до 1 ГБ.   -  person Punith Raj    schedule 26.04.2018