M1苹果芯片上PySpark Pandas UDF无法运行问题求助
PySpark Pandas UDF架构不兼容问题解决
问题描述
在arm64架构设备上使用PySpark Pandas UDF时,触发numpy C扩展导入失败错误,提示架构不兼容(当前为arm64,需要x86_64),卸载并重新安装numpy、PySpark后问题仍存在。操作流程如下:
- 执行
pip install pyspark安装PySpark - 初始化Spark:
from pyspark.sql import SparkSession spark = SparkSession.builder.getOrCreate()
- 创建DataFrame:
from datetime import date, datetime rdd = spark.sparkContext.parallelize([ (1, 2., 'string1', date(2000, 1, 1), datetime(2000, 1, 1, 12, 0)), (2, 3., 'string2', date(2000, 2, 1), datetime(2000, 1, 2, 12, 0)), (3, 4., 'string3', date(2000, 3, 1), datetime(2000, 1, 3, 12, 0)) ]) df = spark.createDataFrame(rdd, schema=['a', 'b', 'c', 'd', 'e'])
- 定义并调用Pandas UDF:
import pandas as pd from pyspark.sql.functions import pandas_udf @pandas_udf('long') def pandas_plus_one(series: pd.Series) -> pd.Series: return series + 1 df.select(pandas_plus_one(df.a)).show()
解决方案
方案1:通过Rosetta 2以x86_64架构运行终端(适用于Mac M系列芯片)
- 找到「终端」应用,右键选择「显示简介」
- 勾选「使用Rosetta打开」,重启终端
- 卸载现有numpy:
pip uninstall -y numpy - 重新安装适配x86_64的numpy:
pip install numpy - 重新运行PySpark代码
方案2:安装适配ARM64的numpy版本
- 卸载现有numpy:
pip uninstall -y numpy - 若使用conda环境,执行
conda install numpy(conda会自动匹配架构安装对应版本) - 若使用pip,执行
pip install --no-binary :all: numpy,强制编译适配arm64的numpy版本
方案3:指定Spark使用适配架构的Python环境
在初始化Spark前添加环境变量,确保PySpark调用的Python环境中numpy是当前架构适配版本:
import os # 替换为你的Python路径,需确认该路径下的numpy为arm64版本 os.environ['PYSPARK_PYTHON'] = '/usr/bin/python3' os.environ['PYSPARK_DRIVER_PYTHON'] = '/usr/bin/python3' from pyspark.sql import SparkSession spark = SparkSession.builder.getOrCreate()
内容的提问来源于stack exchange,提问作者Jason Rich Darmawan
相关产品推荐
相关产品推荐

