Python 3.x PyArrow OSError:[WinError 193]%1不是有效的win32应用程序

Python 3.x PyArrow OSError:[WinError 193]%1不是有效的win32应用程序,python-3.x,pyarrow,hadoop3,Python 3.x,Pyarrow,Hadoop3,我的操作系统是Windows 10 64位,我使用Anaconda 3.8 64位。我尝试用PyArrow模块开发Hadoop文件系统3.3客户端。已成功在windows 10上安装带有conda的PyArrow > conda install -c conda-forge pyarrow 但hdfs 3.3与pyarrow的连接会引发如下错误: import pyarrow as pa fs = pa.hdfs.connect(host='localhost', port=9000)

我的操作系统是Windows 10 64位,我使用Anaconda 3.8 64位。我尝试用PyArrow模块开发Hadoop文件系统3.3客户端。已成功在windows 10上安装带有conda的PyArrow

> conda install -c conda-forge pyarrow
但hdfs 3.3与pyarrow的连接会引发如下错误:

import pyarrow as pa
fs = pa.hdfs.connect(host='localhost', port=9000)
错误是

Traceback (most recent call last):
  File "C:\eclipse-workspace\PythonFredProj\com\aaa\fred\hdfs3-test.py", line 14, in <module>
    fs = pa.hdfs.connect(host='localhost', port=9000)
  File "C:\Python-3.8.3-x64\lib\site-packages\pyarrow\hdfs.py", line 208, in connect
    fs = HadoopFileSystem(host=host, port=port, user=user,
  File "C:\Python-3.8.3-x64\lib\site-packages\pyarrow\hdfs.py", line 38, in __init__
    _maybe_set_hadoop_classpath()
  File "C:\Python-3.8.3-x64\lib\site-packages\pyarrow\hdfs.py", line 136, in _maybe_set_hadoop_classpath
    classpath = _hadoop_classpath_glob(hadoop_bin)
  File "C:\Python-3.8.3-x64\lib\site-packages\pyarrow\hdfs.py", line 163, in _hadoop_classpath_glob
    return subprocess.check_output(hadoop_classpath_args)
  File "C:\Python-3.8.3-x64\lib\subprocess.py", line 411, in check_output
    return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
  File "C:\Python-3.8.3-x64\lib\subprocess.py", line 489, in run
    with Popen(*popenargs, **kwargs) as process:
  File "C:\Python-3.8.3-x64\lib\subprocess.py", line 854, in __init__
    self._execute_child(args, executable, preexec_fn, close_fds,
  File "C:\Python-3.8.3-x64\lib\subprocess.py", line 1307, in _execute_child
    hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
OSError: [WinError 193] %1 is not a valid win32 application
回溯(最近一次呼叫最后一次):
文件“C:\eclipse workspace\PythonFredProj\com\aaa\fred\hdfs3 test.py”,第14行,在
fs=pa.hdfs.connect(host='localhost',port=9000)
文件“C:\Python-3.8.3-x64\lib\site packages\pyarrow\hdfs.py”,第208行,在connect中
fs=Hadoop文件系统(主机=主机,端口=端口,用户=用户,
文件“C:\Python-3.8.3-x64\lib\site packages\pyarrow\hdfs.py”,第38行,在_init中__
_也许\u set\u hadoop\u classpath()
文件“C:\Python-3.8.3-x64\lib\site packages\pyarrow\hdfs.py”,第136行,位于\u maybe\u set\u hadoop\u类路径中
classpath=\uHadoop\uCLASSPATH\uGlob(hadoop\uBin)
文件“C:\Python-3.8.3-x64\lib\site packages\pyarrow\hdfs.py”,第163行,位于hadoop\u classpath\u glob中
返回子进程。检查输出(hadoop\u类路径\u参数)
文件“C:\Python-3.8.3-x64\lib\subprocess.py”,第411行,在check\u输出中
返回运行(*popenargs,stdout=PIPE,timeout=timeout,check=True,
文件“C:\Python-3.8.3-x64\lib\subprocess.py”,第489行,正在运行
使用Popen(*popenargs,**kwargs)作为流程:
文件“C:\Python-3.8.3-x64\lib\subprocess.py”,第854行,在_init中__
self.\u execute\u child(参数、可执行文件、预执行文件、关闭文件、,
文件“C:\Python-3.8.3-x64\lib\subprocess.py”,第1307行,在执行子进程中
hp、ht、pid、tid=\u winapi.CreateProcess(可执行文件、参数、,
OSError:[WinError 193]%1不是有效的win32应用程序

我在Windows 10上安装了Visual C++ 2015,但是仍然显示了同样的错误。

< P>这是我的解决方案。
  • 在启动pyarrow之前,必须在windows 10 64位上安装Hadoop 3。并且必须在path上设置安装路径

  • 安装pyarrow 3.0(版本很重要,必须是3.0)

    pip安装pyarrow==3.0

  • 在EclipsePydev透视图上创建PyDev模块

    从pyarrow导入fs

    hadoop=fs.HadoopFileSystem(“localhost”,端口=9000) 打印(hadoop.get_file_info('/'))

  • 选择您创建的pydev模块并单击
    [属性(Alt+Enter)]

  • 单击[运行/调试设置]。选择pydev模块和[编辑]按钮。

  • 在[编辑配置]窗口中,选择[环境]选项卡

  • 单击[添加]按钮

  • 您必须创建两个环境变量。“CLASSPATH”和“LD_LIBRARY_PATH”

  • CLASSPATH:在命令提示符中,执行以下命令
  • 复制返回的值并将其粘贴到值文本字段中(返回的值是长字符串值,但复制所有值)

  • LD_LIBRARY_PATH:将hadoop 3上libhdfs.so文件的路径(在我的示例中是“C:\hadoop-3.3.0\lib\native”)插入值文本字段
  • 好的!设置了pyarrow 3.0配置。您可以在windows 10 eclipse PyDev上连接hadoop 3.0

  • 我解决了这个问题。我在我的虚拟机上安装和卸载了很多次Anacond,我认为这些都会带来这些错误。我删除了虚拟机上的所有Windows 10并重新创建了虚拟机。pyarrow可以正常工作。谢谢。为了未来读者的利益,Joseph,值得写一个答案吗?或者你仅仅是我不知道是否值得结束这个问题。如果我的英语语法很糟糕,请修改我的错误。
    hdfs classpath --glob