【问题标题】:SciSpark: Reading from local folder instead of HDFS folderSciSpark:从本地文件夹而不是 HDFS 文件夹读取
【发布时间】:2020-10-13 07:09:18
【问题描述】:

我使用的企业集群同时具有本地和 HDFS 文件系统。我需要处理的文件是 netcdf 格式,因此我使用SciSpark 来加载。在没有 HDFS 的工作站上,代码从本地文件夹中读取。但是,当存在 HDFS 文件夹时,它会尝试仅从 HDFS 读取。由于文件夹中存在的文件很大(累积到数百 GB 到 TB),我不得不将它们复制到 HDFS,这既低效又不方便。我用于加载文件的 (Scala) 代码如下所示:

val ncFilesRDD = sc.netcdfDFSFiles(ncDirectoryPath, List("x1", "x2", "x3"))
val ncFileCRDArrayRDD = ncFilesRDD.map(x => (x.variables.get("x1").get.data.toArray,
                             x.variables.get("x2").get.data.toArray,
                             x.variables.get("x3").get.data.toArray
                             ))

我非常感谢在修改代码以使我能够使用本地目录而不是 HDFS 的任何帮助。

【问题讨论】:

    标签: scala apache-spark hdfs


    【解决方案1】:

    netcdfDFSFiles 的源代码注释文档说 that since the files are read from HDFS

    不确定是否可以使用netcdfDFSFiles 从本地读取。

    但是还有另一个函数netcdfFileList 说:The URI could be an OpenDapURL or a filesystem path.

    既然可以取filesystem path,就可以像这样使用

    val ncFilesRDD = sc.netcdfFileList("file://your/path", List("x1", "x2", "x3"))
    

    file:// 将仅查找本地目录。

    【讨论】:

    • 感谢您的回复。如果 HDFS 不可用,该代码可以工作,并且我一直在使用它在其他系统上进行基准测试。将尝试您的建议并让您知道结果。
    • 您是否尝试在您的路径中使用file:// 来实现函数netcdfDFSFiles。
    • 刚刚做了。 val ncFilesRDD = sc.netcdfFileList("file:///bigdata/home/IPDATA", List("x1", "x2", "x3"))。使用正确数量的文件创建了一些 RDD,但下一步失败。 java.io.FileNotFoundException: CDF。我正在尝试查看提供具有完整路径的文件列表是否会有所帮助。
    • 终于成功了!我必须提供一个文件列表(即具有完整路径的文件)并将其作为单个文件放在目录中。然后它选择文件列表,并加载文件。它也应该与多个文件列表类似地工作。非常感谢!
    • 太棒了! :)
    猜你喜欢
    • 2021-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-23
    • 1970-01-01
    • 1970-01-01
    • 2020-03-29
    • 1970-01-01
    相关资源
    最近更新 更多