【问题标题】:Writing Parquet to HDFS in Python用 Python 将 Parquet 写入 HDFS
【发布时间】:2018-09-10 14:37:41
【问题描述】:

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

我还没有找到解决这个错误的方法......所以如果有人有想法......

谢谢, 内拉

【问题讨论】:

  • 你能发布完整的堆栈跟踪吗?

标签: hadoop hdfs parquet


【解决方案1】:

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

默认情况下,pyarrow.hdfs.HadoopFileSystem 使用 libhdfs,这是一个基于 JNI 的 Java Hadoop 客户端接口。该库在运行时加载(而不是在链接/库加载时,因为该库可能不在您的 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')```

【讨论】:

    猜你喜欢
    • 2016-06-29
    • 2017-03-17
    • 2017-04-06
    • 2018-01-31
    • 2017-01-05
    • 2018-06-04
    • 2022-01-05
    • 1970-01-01
    • 2021-11-05
    相关资源
    最近更新 更多