Spark Submit作业报错:'numpy.dtype'对象无'_get_object_id'属性
问题解决:spark-submit中
numpy.dtype无_get_object_id属性的AttributeError 问题描述
运行spark-submit作业时触发以下错误:
AttributeError: 'numpy.dtype' object has no attribute '_get_object_id'
错误发生在spark.createDataFrame(panda_df, schema=myschema)这一行。本地以独立脚本运行代码无异常,仅spark-submit提交作业时出现报错。
相关代码
mycursor.execute( "SELECT a, b, c, d, e" "FROM {} ".format(mysql_schema)) panda_df = DataFrame(mycursor.fetchall()) myschema = StructType( [ StructField('a', StringType(), True), StructField('b', StringType(), True), StructField('c', StringType(), True), StructField('d', StringType(), True), StructField('e', StringType(), True) ]) spark_df = spark.createDataFrame(panda_df, schema=myschema)
数据验证
打印的panda_df内容及数据类型均符合预期:
print(panda_df.to_string()) a b c d e 0 38 38 N 2 Y 1 49 49 N 3 Y 2 64 64 N 5 Y 3 26 26 N 11 Y 4 36 36 N 12 Y print(panda_df.dtypes) a object b object c object d object e object dtype: object
环境信息
- 系统:MacOS M1
- PySpark版本:3.1.1
- numpy版本:1.19.5
- pandas版本:1.1.5
问题根因
经排查,错误由代码中未显式包含的logger配置导致。这类隐式的logger初始化会在Spark分布式环境中干扰numpy数据类型的序列化/反序列化流程,进而触发_get_object_id属性缺失的错误。
解决方法
确保代码中显式管理logger的初始化,避免隐式配置影响Spark作业运行:
- 若使用logging模块,显式调用
logging.basicConfig(),或配置logger时按需指定disable_existing_loggers=False - 移除或重构可能隐式初始化logger的第三方依赖或代码片段
- 在Spark作业入口处显式初始化logger,保证分布式节点上的logger配置一致
内容的提问来源于stack exchange,提问作者bulbasarous
相关产品推荐
相关产品推荐

