使用from_avro方法时出现TimestampNTZType类缺失错误求助
问题解决:Spark 3.0.2使用from_avro出现NoClassDefFoundError错误
问题原因
TimestampNTZType是Spark 3.2及更高版本才引入的类型,Spark 3.0.2本身并不包含这个类。出现错误的核心原因是avro相关依赖版本与Spark 3.0.2不匹配——大概率是引入了适配Spark 3.2+的spark-avro包,导致代码尝试加载Spark 3.0.2不存在的类。
解决办法
使用与Spark 3.0.2匹配的spark-avro版本
Spark 3.0.x对应的spark-avro版本必须是3.0.2,提交应用时通过--packages参数指定依赖:spark-submit --packages org.apache.spark:spark-avro_2.12:3.0.2 your_script.py如果是本地开发环境,直接下载对应版本的
spark-avro_2.12-3.0.2.jar放入Spark的jars目录,替换掉原有不兼容的版本。清理依赖冲突
检查项目或环境中是否存在高版本的Spark相关jar包(比如Spark 3.2+的spark-sql.jar或其他组件jar),这类jar会导致类加载冲突,必须移除,只保留Spark 3.0.2对应的全套依赖。修正schema语法错误
你的schema定义末尾缺少闭合的}]},修正后的代码如下:schema = """{ "type": "record", "name": "struct", "fields": [ {"name":"fileno", "type":["null", "string", "int", "double", "float", "long"]}, {"name":"recordtype", "type":["null", "string", "int", "double", "float", "long"]} ] }""" from pyspark.sql.avro.functions import from_avro import pyspark.sql.functions as F df.select(from_avro(F.col("value"), schema))
内容的提问来源于stack exchange,提问作者GFR
相关产品推荐
相关产品推荐

