我正在学习使用Parquet格式(感谢这个链接)https://arrow.apache.org/docs/python/parquet.html). 所以,我试图写Parquet文件到hdfs,但它不工作。我有以下代码:
`import pyarrow as pa
host='my.host'
port=8020
user='username'
df = pd.DataFrame({'one': [-1, np.nan, 2.5],'two': ['foo', 'bar', 'baz'],'three': [True, False, True]}, index=list('abc'))
fs = pa.hdfs.connect(host, port, user=user)`
最后一行给了我一个错误:
"FileNotFoundError: [Errno 2] No such file or directory: 'hadoop': 'hadoop'"
我还没有找到解决这个错误的方法。。。所以如果有人有主意。。。
谢谢,内拉
1条答案
按热度按时间67up9zun1#
正如这里所描述的,你需要把
bin
文件夹中的hadoop发行版PATH
.默认情况下,pyarrow.hdfs.hadoopfilesystem使用libhdfs,这是一个基于jni的java hadoop客户端接口。此库在运行时加载(而不是在链接/库加载时加载,因为库可能不在您的ld\u library\u路径中),并且依赖于某些环境变量。
hadoop\u home:安装的hadoop发行版的根目录。通常有lib/native/libhdfs.so。
javau home:javasdk安装的位置。
arrow\u libhdfs\u dir(可选):libhdfs.so的显式位置,如果它安装在$hadoop\u home/lib/native以外的地方。
classpath:必须包含hadoop jar。您可以使用以下方法设置:
export CLASSPATH="$HADOOP_HOME/bin/hdfs classpath --glob"
如果没有设置classpath,那么如果hadoop可执行文件在您的系统路径中,或者如果hadoop\u home被设置,那么它将被自动设置。您还可以使用libhdfs3,这是pivotal labs的第三方c++hdfs库: