用Python将Parquet写入HDFS

时间:2018-09-10 14:37:42

标签: hadoop hdfs parquet

我正在学习使用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 个答案:

答案 0 :(得分:0)

here所述,您需要将bin文件夹放在PATH的hadoop发行版中。

  

默认情况下,pyarrow.hdfs.HadoopFileSystem使用libhdfs,这是Java Hadoop客户端基于JNI的接口。该库在运行时加载(而不是在链接/库加载时加载,因为该库可能不在您的LD_LIBRARY_PATH中),并且依赖于某些环境变量。

     
      
  • HADOOP_HOME:已安装的Hadoop发行版的根目录。经常有lib / native / libhdfs.so。
  •   
  • JAVA_HOME:您的Java SDK安装位置。
  •   
  • ARROW_LIBHDFS_DIR(可选):libhdfs.so的显式位置(如果安装在$ HADOOP_HOME / lib / native以外的位置)。
  •   
  • CLASSPATH:必须包含Hadoop jar。您可以使用以下命令进行设置:
  •   
     

export CLASSPATH="$HADOOP_HOME/bin/hdfs classpath --glob"

     

如果未设置CLASSPATH,则如果hadoop可执行文件位于系统路径中,或者设置了HADOOP_HOME,则会自动设置它。

     

您还可以使用libhdfs3(Pivotal Labs的HDFS第三方C ++库):

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