【发布时间】:2018-02-06 15:44:35
【问题描述】:
我已经删除了我的两个问题,因为我认为我太大了,我无法清楚地解释它。
所以这次我试着让它变得简单。
所以我有一个复杂的嵌套 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 我期待可以使用分区完成的唯一文件,但我如何将其保存在文本文件中。
我必须保存数组中的所有元素,我的意思是所有列。
我希望这次我能把我的问题说清楚。
如果需要,我也可以更新架构。
【问题讨论】:
-
为什么要将这些保存为 CSV? CSV 从根本上说是一种平面数据格式。为什么不使用 Json ?
-
@SarveshKumarSingh 稍后我必须对 csv 文件执行连接 ..
-
@RameshMaharjan haan 是的,先生……您已经回答了……我无法删除,因为它有答案……
标签: scala apache-spark-sql spark-dataframe apache-spark-xml