Как сохранить вывод данных массива из файла 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.