python写入hdfs文件

lvjbypge  于 2021-05-29  发布在  Hadoop
关注(0)|答案(3)|浏览(885)

从本地python脚本在远程hdfs中创建/写入/更新文件的最佳方法是什么?
我可以列出文件和目录,但写作似乎是一个问题。
我已经搜索了hdfs和snakebite,但是没有一个能给出一个干净的方法。

xsuvu9jc

xsuvu9jc1#

试试hdfs图书馆。。你可以使用write()这真是太好了。https://hdfscli.readthedocs.io/en/latest/api.html#hdfs.client.client.write
例子:
要创建连接:

from hdfs import InsecureClient
client = InsecureClient('http://host:port', user='ann')

from json import dump, dumps
records = [
  {'name': 'foo', 'weight': 1},
  {'name': 'bar', 'weight': 2},
]

# As a context manager:

with client.write('data/records.jsonl', encoding='utf-8') as writer:
  dump(records, writer)

# Or, passing in a generator directly:

client.write('data/records.jsonl', data=dumps(records), encoding='utf-8')

对于csv你可以做什么

import pandas as pd
df=pd.read.csv("file.csv")
with client_hdfs.write('path/output.csv', encoding = 'utf-8') as writer:
  df.to_csv(writer)
vnjpjtjt

vnjpjtjt2#

无需使用为hdfs构建的复杂库,也可以简单地将python中的requests包用于hdfs,如下所示:

import requests
from json import dumps
params = (
('op', 'CREATE')
)
data = dumps(file)  # some file or object - also tested for pickle library
response = requests.put('http://host:port/path', params=params, data=data)

如果响应是200,那么您的连接正在工作!此技术允许您使用hadoop的restfulapi提供的所有实用程序:ls、md、get、post等。
还可以通过以下方法将curl命令转换为python:
获取hdfs的命令:https://hadoop.apache.org/docs/r1.0.4/webhdfs.html
转换为python:https://curl.trillworks.com/
希望这有帮助!

jfewjypa

jfewjypa3#

其他答案怎么了

它们使用webhdfs,这在默认情况下是不启用的,并且在没有kerberos或apacheknox的情况下是不安全的。
这就是 upload 它的功能 hdfs 链接到的库使用。

使用python编写hdfs的本机(更安全)方法

你可以用 pyspark .
示例-如何将pysparkDataframe写入hdfs,然后如何将其读回Dataframe? snakebite 但它不写文件 pyarrow 有一个filesystem.open()函数,应该也可以写入hdfs,尽管我没有尝试过。

相关问题