scala - 在 Scala 中从 HDFS 加载 XML 文件
问题描述
我想使用 XML Scala API 从 HDFS 加载 XML 文件。我正在尝试如下,但它无法识别路径。谁能告诉我如何使用 Scala 从 HDFS 加载文件?
import scala.xml.{NodeSeq, XML}
val xml_load = XML.loadFile("hdfs:////user/np.user/raw/xmlfile.xml")
解决方案
我假设您使用的是 Scala 2.12.x;我还假设这四个斜线hdfs:////user...
是错字。
您正在使用方法XML.loadFile(name: String)
;它在内部使用FileInputStream
. 无法使用普通的FileInputStream
. 您需要一个支持 HDFS 的输入流。你可以在org.apache.hadoop:hadoop-hdfs
图书馆找到它。
然后代码如下所示:
import org.apache.hadoop.conf.Configuration
import org.apache.hadoop.fs._
// configure properly so the code knows which Hadoop cluster to connect to
// https://hadoop.apache.org/docs/r3.2.0/api/org/apache/hadoop/conf/Configuration.html
val conf = new Configuration()
// obtain input stream instance
val hdfsPath: Path = new Path("hdfs://user/np.user/raw/xmlfile.xml")
val fs: FileSystem = hdfsPath.getFileSystem(conf)
val inputStream: FSDataInputStream = fs.open(hdfsPath)
// load XML
try {
val xml_load = XML.load(inputStream)
} finally {
// close resources; of course, this will silently swallow any exception in close() methods
inputStream.close()
fs.close()
}
推荐阅读
- sas - 如何根据不同的条件从数字键中隔离选择的数字?
- r - 在 R Shiny Markdown 中渲染 3d 图
- javascript - 如何使 Shift + Enter 在内容可编辑的 div 中表现得像 Enter 一样?
- ios - iOS Core Data 乐观锁失败误报
- c++ - How to apply mutexes when passing by value?
- python - When using df.drop in pandas make the index of rows shift
- python - 使用单元链接函数运行代码(在 Google Colab 笔记本中)
- assembly - Byte Storage in a Cpu Register: where is AL inside RAX?
- reactjs - 如何在反应中改变边框颜色?
- python - OSError: [Errno 8] Exec 格式错误 - 启动 Flask 应用程序时