当前位置: 首页 > news >正文

解决Python升级导致PySpark任务异常方案

背景

上一篇文章中写了  Linux 多Python版本统一和 PySpark 依赖 python 包方案,但是最近升级 Linux 服务器 上 Python 版本(3.6.8 -> 3.7.16,手动编译Python官方的二进制源码)之后,发现之前文章提到 python3 -m venv /path 方式打包 python.zip 包后,之前 pyspark 任务运行出现 Fatal Python error: initfsencoding: Unable to get the locale encoding。ModuleNotFoundError: No module named 'encodings 异常,导致任务失败。尝试多次编译Python源码和尝试网上提供的解决方案,发现还是不行。

后续发现可以通过 conda 虚拟环境打包方案,可以解决上面出现的问题。

解决方案

# 官方下载 Python 版本,并手动编译
tar -xvf Python-3.7.16.tar.xzcd Python-3.7.16./configure --prefix=/usr/local/python3.7.16 --enable-shared --with-ssl  && make && make install# linux 服务器 Python 版本软连接变更(根据自己连接调整)
cd /usr/bin# 软连接如果存在,则删除
ln -s /usr/local/python3.7.16/bin/python3.7 python3.7rm -rf python3ln -s python3.7 python3python3 -V#根据需要创建通用软连接
ln -s    /usr/local/python3.7.16 /usr/local/python3#依赖的 python3.zip 下面这个方法打包有问题,encodings 包有缺失问题。所以 下面采用  conda  虚拟环境打包
#Pyspark 任务运行出现类似这样异常 Fatal Python error: initfsencoding: Unable to get the locale encoding。ModuleNotFoundError: No module named 'encodingspython3 -m venv  /home/root/python3.7.16-venv/#通过 conda 来打包 python3.zip,解决之前方法打包遗漏问题,官方下载安装 Miniconda3软件包# 添加执行权限
chmod +x Miniconda3-latest-Linux-x86_64.sh
#安装
./Miniconda3-latest-Linux-x86_64.sh# 使环境变量生效,后续不用再注释掉 ~/.bashrc 中新增的 conda 配置
source ~/.bashrc# 激活环境
source activate py37_env# 退出环境
conda deactivate# 查看环境位置
conda env list# 进入环境目录(通常在)
cd /root/miniconda3/envs/py37_env# 创建打包目录
mkdir -p ~/python37_pack
cd ~/python37_pack# 复制必要文件
cp -r ../lib .
cp -r ../bin .# 打包
zip -r python37.zip *mv /usr/local/python3/python3.zip /usr/local/python3/python3.zip.bak.$(date +%Y-%m-%d)
cp python37.zip /usr/local/python3/# 注释 conda 环境变量,conda 默认环境Python版本比较高
echo $PATH#如果linux 服务器上安装的Python版本跟 conda 自身Python 版本不一致,注释掉 类似以下的 Conda 相关配置即可[root@-centos miniconda3]# pwd
/root/miniconda3
[root@-centos miniconda3]# ./bin/python3 -V
Python 3.12.9
[root@-centos miniconda3]# python3 -V
Python 3.7.16vim ~/.bashrc[root@-centos miniconda3]# cat ~/.bashrc
# .bashrc# User specific aliases and functionsalias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'# Source global definitions
if [ -f /etc/bashrc ]; then. /etc/bashrc
fi# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
#__conda_setup="$('/root/miniconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
#if [ $? -eq 0 ]; then
#    eval "$__conda_setup"
#else
#    if [ -f "/root/miniconda3/etc/profile.d/conda.sh" ]; then
#        . "/root/miniconda3/etc/profile.d/conda.sh"
#    else
#        export PATH="/root/miniconda3/bin:$PATH"
#    fi
#fi
#unset __conda_setup
# <<< conda initialize <<<source ~/.bashrc
# PySpark 验证最小demofrom pyspark.sql import SparkSessionspark = SparkSession.builder.getOrCreate()
rdd = spark.sparkContext.parallelize([1, 2, 3])
print(rdd.map(lambda x: x * 2).collect())
spark.stop()#手动提交命令 client 或 cluster 都行
spark-submit --master yarn --deploy-mode cluster --archives file:///usr/local/python3/python3.zip#python3 --conf spark.yarn.appMasterEnv.PYSPARK_PYTHON=./python3/bin/python3 /xxx/test.py

相关文章:

解决Python升级导致PySpark任务异常方案

背景 上一篇文章中写了 Linux 多Python版本统一和 PySpark 依赖 python 包方案&#xff0c;但是最近升级 Linux 服务器 上 Python 版本&#xff08;3.6.8 -> 3.7.16&#xff0c;手动编译Python官方的二进制源码&#xff09;之后&#xff0c;发现之前文章提到 python3 -m v…...

Linux中线程创建,线程退出,线程接合

线程的简单了解 之前我们了解过 task_struct 是用于描述进程的核心数据结构。它包含了一个进程的所有重要信息&#xff0c;并且在进程的生命周期内保持更新。我们想要获取进程相关信息往往从这里得到。 在Linux中&#xff0c;线程的实现方式与进程类似&#xff0c;每个线程都…...

机器视觉检测中,2D面阵相机和线扫相机的区别

2D面阵相机和线扫相机是工业视觉系统中常用的两种相机类型&#xff0c;各有其特点和应用场景。 2D面阵相机 特点&#xff1a; 成像方式&#xff1a;通过二维传感器一次性捕捉整个场景的图像。 分辨率&#xff1a;分辨率由传感器的像素数决定&#xff0c;常见的有百万像素到几千…...

LeetCode 热题 100_N 皇后 (62_51_困难_C++)(递归(回溯))

LeetCode 热题 100_N 皇后&#xff08;62_51&#xff09; 题目描述&#xff1a;输入输出样例&#xff1a;题解&#xff1a;解题思路&#xff1a;思路一&#xff08;递归&#xff08;回溯&#xff09;&#xff09;&#xff1a; 代码实现代码实现&#xff08;思路一&#xff08;递…...

Winform(C#) 项目保存页面

上一张我们已经实现了TCP和串口页面的数据展示&#xff0c;和保存控件 我们这一章&#xff0c;实现如何去&#xff0c;控制保存。 一、控件展示 CheckBox TextBox Button label Name: checkSaveImage checkDelete txtSaveDays txtSaveImagePath btnSelectIm…...

【LeetCode: LCR 126. 斐波那契数 + 动态规划】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…...

OSPF(开放路径最短优先)

ospf优先级&#xff1a;内部优先级默认为10&#xff0c;外部优先级默认为150 1.ospf的三张表 &#xff08;1&#xff09;邻居表 <记录邻居状态和关系> &#xff08;2&#xff09;拓扑表 <链路状态数据库> &#xff08;3&#xff09;路由表 <对链路状态数据库进…...

JAVA EE初阶 - 预备知识(四)

一、API API 即应用程序编程接口&#xff08;Application Programming Interface&#xff09;&#xff0c;是一组定义、协议和工具&#xff0c;用于不同软件组件、应用程序或系统之间进行交互和通信。以下从多个方面详细介绍 API&#xff1a; 基本概念 接口规范&#xff1a;A…...

如何解决服务器端口被攻击:全面防护与快速响应

服务器端口被攻击是网络安全中常见的问题之一&#xff0c;尤其是当服务器暴露在公共网络上时&#xff0c;容易成为黑客的目标。攻击者可能通过扫描开放端口、利用漏洞或发动拒绝服务&#xff08;DoS/DDoS&#xff09;攻击来破坏服务器的正常运行。本文将详细介绍如何检测、防御…...

golang panic原理

数据结构与底层实现 Goroutine结构体 stack&#xff08;栈内存范围&#xff09; 结构体类型&#xff0c;包含 lo&#xff08;低地址&#xff09;和 hi&#xff08;高地址&#xff09;两个 uintptr 字段&#xff0c;描述 Goroutine 的栈内存区间 [lo, hi)。初始栈大小为 2KB&a…...

scratch猜年龄互动小游戏 2024年12月scratch四级真题 中国电子学会 图形化编程 scratch四级真题和答案解析

scratch猜年龄互动小游戏 2024年12月电子学会图形化编程Scratch等级考试四级真题 一、题目要求 老爷爷的年龄是1-100的随机数,老爷爷询问“请猜猜我的年龄是多少?”,输入年龄,老爷爷会回答"大了"或者"小了,直到最后成功猜出年龄。 1、准备工作 (1)删…...

【Elasticsearch】查询规则_query_rules

1.Query Rules 的定义与作用 Query Rules 是 Elasticsearch 提供的一种功能&#xff0c;允许用户根据预定义的规则动态调整搜索结果。它通过匹配查询的元数据&#xff08;如用户输入、地理位置、用户兴趣等&#xff09;&#xff0c;对搜索结果进行定制化调整&#xff0c;例如固…...

Git备忘录(三)

设置用户信息: git config --global user.name “itcast” git config --global user.email “ helloitcast.cn” 查看配置信息 git config --global user.name git config --global user.email $ git init $ git remote add origin gitgitee.com:XXX/avas.git $ git pull or…...

用户的声音 | 文档结构化信息提取方案测评:LLM、开源模型部署与云端API,谁是合适选择?

文档预处理之文本化 近日&#xff0c;我们收到来自专业用户的使用心得&#xff0c;浅析结构化信息提取技术、技术选型及一些个人测试。 结构化信息提取的重要性 数据作为大模型时代的核心生产资料&#xff0c;其结构化处理能力直接影响AI系统的实用价值。尽管知识图谱、RAG等…...

vite调试node_modules下面插件

在使用vite进行开发的时候,我们可能想要修改node_modules中插件的源码.特别是集成一个SDK&#xff0c;需要调试去判断问题时&#xff0c;或者研究第三方源码时后; vite默认是走缓存的&#xff0c;所以当修改后不会看到你打印的日志&#xff0c;这个时候有几种方法可以选择; 方式…...

ES12 weakRefs的用法和使用场景

ES12 (ECMAScript 2021) 特性总结&#xff1a;WeakRef 1. WeakRef 概述 描述 WeakRef 是 ES12 引入的一个新特性&#xff0c;用于创建对对象的弱引用。弱引用不会阻止垃圾回收器回收对象&#xff0c;即使该对象仍然被弱引用持有。WeakRef 通常与 FinalizationRegistry 结合使…...

【Python】集合set详细讲解(语法、操作、集合运算、性能、使用场景)

文章目录 1. 语法1.1 使用 {} 定义1.2 使用 set() 定义 2. 特点3. 常用操作3.1 访问元素3.2 查找数据3.3 添加元素3.3.1 add() 方法3.3.2 update()方法 3.4 删除元素3.4.1 remove()方法3.4.2 discard()方法3.4.3 pop()方法3.4.4 clear()方法 3.5 集合运算3.5.1 并集&#xff1a…...

网络安全大数据架构 网络安全之数据安全

&#x1f345; 点击文末小卡片 &#xff0c;免费获取网络安全全套资料&#xff0c;资料在手&#xff0c;涨薪更快 网络安全和数据安全 从狭义来说&#xff0c;网络安全指网络系统的硬件、软件及其系统中的数据受到保护&#xff0c;不因偶然的或恶意的原因遭到破坏、更改、泄露&…...

(前端基础)CSS(一)

了解 Cascading Style Sheet&#xff1a;层叠级联样式表 CSS&#xff1a;表现层&#xff08;美化网页&#xff09;如&#xff1a;字体、颜色、边框、高度、宽度、背景图片、网页定位、网页浮动 css优势&#xff1a; 内容和表现分离网页结构表现统一&#xff0c;可以实现复用…...

Redis数据类型全景解析:从底层编码到应用反模式

一、核心数据类型矩阵 1.1 基础类型对比表 类型底层结构最大容量时间复杂度典型场景StringSDS/Embstr/Raw512MBO(1)读写缓存/计数器ListQuickList(ziplist)2^32-1元素头尾操作O(1)消息队列Hashziplist/hashtable2^32-1键值对O(1)平均对象存储Setintset/hashtable2^32-1成员O(…...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源&#xff08;HTML/CSS/图片等&#xff09;&#xff0c;响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址&#xff0c;提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

java_网络服务相关_gateway_nacos_feign区别联系

1. spring-cloud-starter-gateway 作用&#xff1a;作为微服务架构的网关&#xff0c;统一入口&#xff0c;处理所有外部请求。 核心能力&#xff1a; 路由转发&#xff08;基于路径、服务名等&#xff09;过滤器&#xff08;鉴权、限流、日志、Header 处理&#xff09;支持负…...

<6>-MySQL表的增删查改

目录 一&#xff0c;create&#xff08;创建表&#xff09; 二&#xff0c;retrieve&#xff08;查询表&#xff09; 1&#xff0c;select列 2&#xff0c;where条件 三&#xff0c;update&#xff08;更新表&#xff09; 四&#xff0c;delete&#xff08;删除表&#xf…...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建 API&#xff0c;支持 Python 3.6。它基于标准 Python 类型提示&#xff0c;易于学习且功能强大。以下是一个完整的 FastAPI 入门教程&#xff0c;涵盖从环境搭建到创建并运行一个简单的…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统

目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索&#xff08;基于物理空间 广播范围&#xff09;2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

HashMap中的put方法执行流程(流程图)

1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中&#xff0c;其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下&#xff1a; 初始判断与哈希计算&#xff1a; 首先&#xff0c;putVal 方法会检查当前的 table&#xff08;也就…...