pyspark -- Please check environment variables PYSPARK_PYTHON

Exception:Python in worker has different version 3.6 than that in driver 2.7,PySpark cannot run with different minor versions.Please check environment variables PYSPARK_PYTHON and PYSPARK_DRIVER_PYTHON are correctly set

from __future__ import print_function
from pyspark import *
import os

os.environ['PYSPARK_PYTHON'] = 'C:/Python27/python2.exe'

if __name__ == '__main__':
    # sc = SparkContext("local")
    sc = SparkContext(appName='first App')
    rdd = sc.parallelize("hello PySpark world".split(' '))
    counts = rdd.map(lambda word: (word, 1)) \
        .reduceByKey(lambda a, b: a + b)
    # counts.saveAsTextFile('F:/out')
    counts.foreach(print)

    sc.stop()

出现这样的问题,是因为,pyspark的python环境与 driver也就是主节点的python环境版本不一致

本地安装了py2 以及py3两个环境, 通过在程序中指定 PYSPARK_PYTHON 的方式:在pycharm运行正常,可是通过 spark-sumit 方式提交仍然出现这样的问题,因默认为py2环境, 而pycharm指定环境为py3,所以出现上述情况,将pycharm Python interpret 指定为py2,正常;

想通过win10设置默认python的方式,实现spark-submit,修改环境变量path中python的地址即可

<think>好的,我现在需要解决用户在Windows系统上使用PyCharm执行StreamExecutionEnvironment.get_execution_environment()时出现的JNI错误。首先,我得理解这个问题的背景和可能的原因。用户提到了JNI错误,通常这类错误与Java Native Interface有关,可能涉及到Java环境配置、依赖库缺失或版本不兼容等问题。 根据用户提供的引用内容,特别是引用[1]中的情况,PyCharm闪退并生成java_error_in_pycharm64_9092.log,错误是EXCEPTION_ACCESS_VIOLATION,问题出现在SrjdDll64.dll这个动态链接库中。这可能意味着某些本地库(native DLLs)存在问题,比如损坏或版本冲突。同时,引用[3]提到Python版本与cx_Oracle的兼容性问题,说明版本不匹配可能导致依赖库加载失败。此外,引用[4]关于python_stubs的问题,可能涉及PyCharm自身的索引或解析问题。 接下来,我需要分析可能导致JNI错误的具体原因。JNI错误通常发生在Java代码调用本地方法时,无法找到对应的本地库或者库的版本不兼容。用户在使用Flink的StreamExecutionEnvironment时,可能需要Flink的本地依赖,比如与Hadoop或本地文件系统交互的组件。在Windows环境下,可能需要特定的DLL文件或环境变量配置。 可能的解决步骤包括: 1. 检查Java环境:确保安装的JDK版本与Flink的要求兼容。例如,Flink 1.13+需要Java 8或11,可能需要确认PyCharm中配置的JDK是否正确。如果用户使用的是较新的Java版本(如Java 17),可能存在兼容性问题,需要降级到支持的版本。 2. 配置JAVA_HOME环境变量:在Windows系统中,正确设置JAVA_HOME指向正确的JDK路径,避免路径中有空格或特殊字符。例如,引用[1]中的错误可能由于环境变量问题导致JVM加载错误的DLL。 3. 检查Flink的本地依赖:Flink在Windows上可能需要额外的本地库,如Hadoop DLLs。用户可能需要下载这些库并放置在正确的位置,比如Flink的bin目录。例如,从Apache官网下载Hadoop的winutils并配置HADOOP_HOME环境变量。 4. PyCharm配置:确保PyCharm使用的Python解释器和JDK版本一致,并且项目的依赖正确安装。可能存在Python包装器(如pyflink)的版本与Flink或Java版本不兼容的问题,需要检查版本匹配性。 5. 检查日志文件:查看详细的错误日志,特别是PyCharm生成的日志或Flink的日志,以确定具体的错误原因。例如,引用[1]中的日志指出了具体的DLL和错误地址,可能帮助定位问题。 6. 重新安装或修复依赖:如果某个DLL文件损坏(如SrjdDll64.dll),可能需要重新安装相关软件或找到替代的DLL文件。此外,确保所有依赖项(如pyflink)通过pip正确安装,并且没有安装冲突的版本。 7. 操作系统兼容性:以管理员身份运行PyCharm,或调整Windows的权限设置,确保程序有权访问所需的资源。有时,安全软件可能阻止DLL加载,需要临时禁用进行测试。 最后,根据用户提供的引用内容,特别是引用[3]中的情况,Python版本过高导致依赖不兼容的问题,可能需要检查Python和Flink库之间的版本兼容性,必要时降级Python版本或升级Flink库。</think>### 解决Windows PyCharm中Flink JNI错误的步骤 #### 1. 检查Java环境配置 - **确认JDK版本兼容性** Apache Flink 1.13+ 要求使用 **Java 8或11**。在PyCharm中检查项目使用的JDK版本: `File > Settings > Build, Execution, Deployment > Build Tools > Gradle > Gradle JVM`,确保选择Java 8/11[^1]。 - 如果使用Java 11,需下载匹配的JBR(JetBrains Runtime)版本[^1]。 - 通过命令行验证: ```bash java -version ``` - **配置JAVA_HOME环境变量** 在系统环境变量中添加: - 变量名:`JAVA_HOME` - 变量值:`C:\Program Files\Java\jdk1.8.0_301`(根据实际路径修改) 确保路径无空格或中文字符。 #### 2. 修复Flink本地依赖缺失问题 - **下载Hadoop WinUtils** Flink在Windows运行时依赖Hadoop的`winutils.exe`: 1. 从[官方仓库](https://github.com/steveloughran/winutils)下载对应Hadoop版本的`bin`目录。 2. 将`winutils.exe`和`hadoop.dll`复制到`C:\hadoop\bin`(或其他自定义路径)。 3. 添加系统环境变量: - `HADOOP_HOME=C:\hadoop` - 在`Path`中添加`%HADOOP_HOME%\bin`。 - **配置Flink本地库路径** 将Hadoop的`bin`目录中的DLL文件复制到Flink的`lib`目录下(如`C:\flink-1.14.0\lib`)。 #### 3. 调整PyCharm配置 - **指定JVM参数** 在PyCharm的运行配置中增加JVM参数: `-Djava.library.path=C:\hadoop\bin`(路径需与`HADOOP_HOME`一致)[^1]。 设置方法: `Run > Edit Configurations > Environment variables > Add: Name=HADOOP_HOME, Value=C:\hadoop` - **清理缓存并重启IDE** 1. 执行`File > Invalidate Caches / Restart`。 2. 删除项目目录下的`.idea`文件夹和`venv`虚拟环境,重新配置项目[^4]。 #### 4. 验证Python依赖兼容性 - **检查PyFlink版本** 确保安装的`apache-flink`版本与Python版本兼容: ```bash pip install apache-flink==1.14.0 # 兼容Python 3.6-3.8 ``` 如果使用Python 3.11,需降级至3.8(参考引用[3])。 #### 5. 以管理员权限运行PyCharm - 右键点击PyCharm快捷方式,选择`以管理员身份运行`,避免权限不足导致的DLL加载失败。 --- ### 典型错误场景与解决方案 - **错误示例**: ```java java.lang.UnsatisfiedLinkError: no hadoop in java.library.path ``` **解决方法**: 检查`HADOOP_HOME`是否正确配置,并将`hadoop.dll`复制到`C:\Windows\System32`。 - **错误示例**: ```java EXCEPTION_ACCESS_VIOLATION in SrjdDll64.dll ``` **解决方法**: 重新安装JetBrains Runtime(JBR)或更换为Oracle JDK。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值