conda pyspark SparkContext()没反应解决办法
网上搜索也发现三四个人在问,但没有结果。
弄了三天终于找到问题所在了,最烦的就是这种没有报错问题。。。
首先是SparkContext()它这么长时间没反应,就知道肯定是它的代码有些问题,然后我就找到了它的源代码:java_gateway.py
(\Anaconda\Lib\site-packages\pyspark目录里,也可以用import java_gateway.py 然后print(java_gateway.__file__)找到它的位置)
105行左右有这么个死循环:
while not proc.poll() and not os.path.isfile(conn_info_file):
time.sleep(0.1)
它的没反应就是卡在了这里。(然后我连os.py都打开修改了,不过这是题外话。)
反正是我排查了两天,今天第三题解决了:
它的程序需要生成一个临时文件,上面几行找找有个env = dict(os.environ),这个字典里可以获得TEMP,临时文件生成地址(这个可以在我的电脑-环境变量里查看)
而我的TEMP地址最后多了个;分号。就很蛋疼我去我的电脑里把最后的分号删了,可是python这里还是没更新,就在python里写了个函数
检测env ['TEMP']的末尾有没有;,有的话就删掉;。env ['TEMP']=env ['TEMP'][:-1]
然后又报错:Unable to make private java.nio.DirectByteBuffer(long,int) accessible
在一个外网找到了答案:https://stackoverflow.com/questions/69019371/why-am-i-seeing-java-lang-reflect-inaccessibleobjectexception-unable-to-make-p
这个pyspark能用jdk8,不能用jdk16,再改一下env就好了:
env['JAVA_HOME']=r'C:\Program Files\Java\jdk1.8.0_241'
浙公网安备 33010602011771号