将XML文件保存到HDFS



>我有一个XML字符串,需要保存到HDFS位置。

<transportation-carrier>
<SCAC>LKSKS</SCAC>
<name>JACKSONVILLE Name</name>
<billing-road-number>139</billing-road-number>
<effective-date>2017-03-08</effective-date>
<expiration-date>2017-03-07</expiration-date>
</transportation-carrier>

我尝试使用 save 命令将 abc 中的这个 xml 元素保存到 HDFS 中的路径 -

 scala.xml.XML.save("/data/temp/example.xml", abc)

我收到此错误消息 -

线程"main"中的异常 java.io.FileNotFoundException: \data\temp\example.xml (系统找不到指定的路径(

我将不胜感激将文件保存到 HDFS 路径的帮助。

我最终将字符串 XML 转换为 XML 文件,然后使用 Scala 的数据砖包将其转换为数据帧

假设Spark和Hadoop env,另一种方法是使用 java.io 和XML.write方法而不是保存。

它省去了中间文件的需求:

import org.apache.hadoop.fs.{ FileSystem, Path, FSDataOutputStream }
import java.io.BufferedWriter
import java.io.OutputStreamWriter
val xmlRoot : Elem = <myElem>test</myElem>
val path: Path = new Path("hdfs:///myfile.xml")
if (fs.exists(path)) {
   fs.delete(path, true)
}
val dataOutputStream: FSDataOutputStream = fs.create(path)
val bw: BufferedWriter = new BufferedWriter(new OutputStreamWriter(dataOutputStream, "UTF-8"))
XML.write(bw, xmlRoot, "utf-8", xmlDecl = true, doctype = null)
bw.close()

适用于Cloudera + Zeppelin env。

最新更新