当前位置: 首页 > 知识库问答 >
问题:

在Scala/Spark中在HDFS上将文件从一个文件夹移动到另一个文件夹

戚侯林
2023-03-14
val fs = FileSystem.get(sc.hadoopConfiguration)
fs.moveFromLocalFile(something, something2)

我得到以下错误:

线程“main”java.lang.IllegalArgumentException:错误的fs:hdfs:/user/o/datasets/data.txt,应为:file:///

movetolocalfile()也是如此,因为它们用于在文件系统之间传输文件,而不是在文件系统内传输文件。我还尝试了fs.rename(),但根本没有任何作用(没有错误或任何东西)。

共有1个答案

穆旭尧
2023-03-14

尝试下面的Scala代码。

import org.apache.hadoop.conf.Configuration
import org.apache.hadoop.fs.FileSystem
import org.apache.hadoop.fs.Path

val hadoopConf = new Configuration()
val hdfs = FileSystem.get(hadoopConf)

val srcPath = new Path(srcFilePath)
val destPath = new Path(destFilePath)

hdfs.copyFromLocalFile(srcPath, destPath)

您还应该检查Spark是否在conf/spark-env.sh文件中设置了HADOOP_CONF_DIR变量。这将确保Spark找到Hadoop配置设置。

build.sbt文件的依赖关系:

libraryDependencies += "org.apache.hadoop" % "hadoop-common" % "2.6.0"
libraryDependencies += "org.apache.commons" % "commons-io" % "1.3.2"
libraryDependencies += "org.apache.hadoop" % "hadoop-hdfs" % "2.6.0"
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

import org.apache.commons.io.IOUtils;



val hadoopconf = new Configuration();
val fs = FileSystem.get(hadoopconf);

//Create output stream to HDFS file
val outFileStream = fs.create(new Path("hdfs://<namenode>:<port>/output_path"))

//Create input stream from local file
val inStream = fs.open(new Path("hdfs://<namenode>:<port>/input_path"))

IOUtils.copy(inStream, outFileStream)

//Close both files
inStream.close()
outFileStream.close()
 类似资料:
  • 我使用以下代码移动图像一个文件夹到另一个文件夹,但它不工作。 如下 但还是不行谢谢

  • 我正在寻找所有的方法移动/复制数据从一个文件夹到另一个在AWS S3桶。 方法1:通过AWS CLI(最简单) 在ur实例上下载并安装awscli,我在这里使用windows(64位链接)并运行“ASW Configure”来填充您的配置,只需在cmd上运行这个命令 这里cp表示复制,递归表示复制所有文件 错误: 无效的bucket名称“s3://staging”:bucket名称必须与regex

  • 我正在尝试创建一个PowerShell脚本,当我的电脑打开时,我可以每天早上运行该脚本,以移动我最近下载的所有类型。x从文件夹y到目标z。 当我运行该代码时,我得到这个错误:

  • 我也在尝试用Python创建一个脚本来读取文本文件。在文本文件的每一行上,都有一个文件名。我希望脚本在文本文件的每一行中循环,并将带有文件名的文件从循环的当前行、从源文件夹移动到特定的目标。 希望这段代码能更准确地说明我在做什么: 我想把文件的内容和特定的文件名放到一个数组中,但是我有62700个可能的文件名,所以我想如果它只是在循环到每一行时移动文件,那么它会更有效率吗? 我还想到了使用迭代器(

  • 我需要过去7天的存储日志来移动一个新文件夹。但是,我不能移动它们,并得到了这个错误。 重命名(/var/www/html/eMarketing/storage/logs/old-log-2020-02-27,/var/www/html/eMarketing/storage/logs/laravel-2020-02-27.log):不是目录 我的密码在这里

  • 我必须将ant项目转换为gradle项目。在这里,当我运行gradle构建时,它创建了war文件,当它部署在服务器上时,分解的war文件夹有两个文件夹META-INF和WEB-INF,我的要求是1。将web.xml从图像中看到的config文件夹复制到WEB-INF文件夹,并将图像中看到的jsp文件夹复制到分解文件夹