用python将parquet写入hdfs

8oomwypt  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(816)

我正在学习使用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'"

我还没有找到解决这个错误的方法。。。所以如果有人有主意。。。
谢谢,内拉

67up9zun

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库:

fs = pa.hdfs.connect(host, port, user=user, kerb_ticket=ticket_cache_path,
                    driver='libhdfs3')```

相关问题