Как сохранить вывод данных массива из файла spark xml в формате csv

Я удалил два своих вопроса, потому что я думал, что я был слишком большим, и я не мог объяснить это аккуратно.

Поэтому я пытаюсь сделать это проще на этот раз.

Так что у меня есть сложный вложенный XML. Я анализирую его в spark Scala, и я должен сохранить все данные из XML в текстовый файл.

ПРИМЕЧАНИЕ: мне нужно сохранить данные в текстовые файлы, потому что позже мне нужно объединить эти данные с другим файлом в текстовом формате. Также я могу присоединиться к моему формату файла CSV с форматом JSON или Perquet? Если да, то мне может не понадобиться конвертировать мой XML в текстовый файл.

Это мой код, где я пытаюсь сохранить XML в CSV-файл, но так как CSV не позволяет сохранить тип массива, поэтому я получаю сообщение об ошибке.

Я ищу какое-то решение, где я мог бы вынуть все элементы массива и сохранить его в текстовом файле.

def main(args: Array[String]) {

    val conf = new SparkConf().setAppName("XML").setMaster("local");
    val sc = new SparkContext(conf); //Creating spark context
    val sqlContext = new org.apache.spark.sql.SQLContext(sc)

    val df = sqlContext.read.format("com.databricks.spark.xml").option("rowTag", "env:Body").load("C://Users//u6034690//Desktop//SPARK//trfsmallfffile//XML")
    val resDf = df.withColumn("FlatType", explode(df("env:ContentItem"))).select("FlatType.*")

    resDf.repartition(1).write
      .format("csv")//This does not support for array Type
      .option("timestampFormat", "yyyy/MM/dd HH:mm:ss ZZ")
      .option("nullValue", "")
      .option("delimiter", "\t")
      .option("quote", "\u0000")
      .option("header", "true")
      .save("C://Users//u6034690//Desktop//SPARK//trfsmallfffile//XML//output")

    // val resDf = df.withColumn("FlatType", when(df("env:ContentItem").isNotNull, explode(df("env:ContentItem"))))
  }

Это производит меня ниже вывода, прежде чем сохранить

+---------+--------------------+
|  _action|            env:Data|
+---------+--------------------+
|   Insert|[fun:FundamentalD...|
|Overwrite|[sr:FinancialSour...|
|Overwrite|[pe:FinancialPeri...|
|Overwrite|[pe:FinancialPeri...|
|Overwrite|[pe:FinancialPeri...|
|Overwrite|[pe:FinancialPeri...|
|Overwrite|[pe:FinancialPeri...|
|Overwrite|[pe:FinancialPeri...|
|Overwrite|[pe:FinancialPeri...|
|Overwrite|[pe:FinancialPeri...|
|Overwrite|[pe:FinancialPeri...|
|Overwrite|[pe:FinancialPeri...|
|Overwrite|[fl:FinancialLine...|
|Overwrite|[fl:FinancialLine...|
|Overwrite|[fl:FinancialLine...|
|Overwrite|[fl:FinancialLine...|
|Overwrite|[fl:FinancialLine...|
|Overwrite|[fl:FinancialLine...|
|Overwrite|[fl:FinancialLine...|
|Overwrite|[fl:FinancialLine...|
+---------+--------------------+

Недруг каждый env:Data Я ожидаю уникальный файл, который можно сделать с помощью раздела, но как я могу сохранить его в текстовом файле.

Я должен сохранить все элементы из массива, я имею в виду все столбцы.

Надеюсь, на этот раз я проясню свой вопрос.

При необходимости я могу обновить схему также.

1 ответ

В Spark SQL есть опция прямой записи в csv. Почему бы не использовать это?

Вот синтаксис:

resDf.write.option("your options").csv("output file path")

Это должно сохранить ваш файл непосредственно в формате CSV.

Другие вопросы по тегам