我已经删除了我的两个问题,因为我认为我太大了,我无法清楚地解释它。
所以这次我试图让它变得简单。
所以我有一个复杂的嵌套 xml。我在 spark scala 中解析它,我必须将 xml 中的所有数据保存到文本文件中。
注意:我需要将数据保存到文本文件中,因为稍后我必须将此数据与另一个文本格式的文件连接起来。我也可以使用 json 或 perquet 文件格式加入我的 csv 文件格式吗?如果是,那么我可能不需要将我的 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
我都期待可以使用分区完成的唯一文件,但我如何将它保存在文本文件中。
我必须保存数组中的所有元素,我的意思是所有列。
我希望这一次我能把我的问题说清楚。
如果需要,我也可以更新架构。