【问题标题】:PySpark not able to move file from local to HDFSPySpark 无法将文件从本地移动到 HDFS
【发布时间】:2021-09-09 03:23:14
【问题描述】:

我在本地机器的 8020 端口上运行 hadoop。我的名称节点存在于路径 /usr/local/Cellar/hadoop/hdfs/tmp/dfs/name 下。我已经使用 Conda env 设置了一个 pySpark 项目并安装了 pyspark 和 hdfs3 依赖项。

以下是我的代码:

from pyspark.sql import SparkSession
from hdfs3 import HDFileSystem

spark = SparkSession.builder.appName('First Project').getOrCreate()

hdfs = HDFileSystem(host="localhost", port=8020)
hdfs.put("test.csv", "/usr/local/Cellar/hadoop/hdfs/tmp/dfs/name/test.csv")

我正在尝试将文件从本地文件系统复制到 HDFS,但出现以下错误:

OSError: Could not open file: /usr/local/Cellar/hadoop/hdfs/tmp/dfs/name/test.csv, mode: wb Parent directory doesn't exist: /usr/local/Cellar/hadoop/hdfs/tmp/dfs/name

但是我可以 cd 进入同一个目录并且它存在。我不确定为什么会出现此错误。

另外,当我尝试使用相同的参数执行 hdfs.mv 时,我收到以下错误:

FileNotFoundError: test.csv

【问题讨论】:

  • hdfs3 与 spark 无关。你也不应该把你的 DFS 数据目录放在 homebrew 路径中

标签: python hadoop hdfs


【解决方案1】:

如果您想使用 Spark 上传本地 CSV,您需要实际使用 Spark

spark = SparkSession.builder.getOrCreate()

df = spark.read.csv('file:///path/to/file.csv')
df.write.csv(output_path)

否则,您无法“放入”您的 Homebrew 位置,因为 HDFS 上不存在(至少,除非您出于某种原因运行 hadoop fs mkdir -p /usr/local/Cellar/...

当我尝试使用相同的参数执行 hdfs.mv ... FileNotFoundError

因为你需要先cd到本地CSV的目录。否则,指定完整路径

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多