【问题标题】:How to send data stored in a variable to HDFS in python如何在python中将存储在变量中的数据发送到HDFS
【发布时间】:2018-08-28 10:37:12
【问题描述】:

例子:

data = "my first program"

如何使用python将这个变量的数据写入hdfs文件?

我尝试过使用:

command = 'echo $data | hdfs dfs -put - /user/test/abc.txt'
os.system(command)`

【问题讨论】:

  • 如果您尝试过,请添加您收到的错误消息。
  • 我没有收到任何错误。但是当我尝试 hdfs dfs -put - /user/test/abc.txt 时,它显示的是一个空白文件 abc.txt。这意味着“echo $data”无法正常工作
  • 使用 subprocess 模块从 python 运行 bash 命令
  • @NihalSangeeth 你能举个例子吗
  • 当然。看看答案

标签: python shell hdfs devops


【解决方案1】:

使用 subprocess 模块从 python 运行 bash 命令。

import subprocess
process = subprocess.Popen("echo $data | hdfs dfs -put - /user/test/abc.txt", 
shell="TRUE" , stdout=subprocess.PIPE)
process.wait()
print(process.returncode)

但最好使用原生 pythonhdfs 连接器。 Check out.

这是文档中的一个 sn-p。

from pyarrow import HdfsClient
# Using libhdfs
hdfs = HdfsClient(host, port, username, driver='libhdfs') 
# Using libhdfs3
hdfs_alt = HdfsClient(host, port, username, driver='libhdfs3')
path = '/user/test/abc.txt'
with hdfs.open(path, 'wb') as f:
    f.write(data)`

【讨论】:

  • 尝试了第一个解决方案,但在尝试第二个解决方案时仍然得到一个空白文件,收到此错误“错误:没有名为 pyarrow 的模块”
  • 这样做了.. 我尝试了 sudo pip install pyarrow 并成功完成。但在那之后也得到了同样的错误
  • 哪个版本的python?你在使用虚拟环境吗?如果它的 python3 则使用pip3 install pyarrow
  • it 2.7 版本。它不是虚拟环境
  • 好的,进入你的python shell 和import pyarrow。因为你没有正确安装pyarrow模块
猜你喜欢
  • 1970-01-01
  • 2018-02-08
  • 2014-03-06
  • 2023-03-20
  • 1970-01-01
  • 2018-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多