我正在尝试将数据写入 PySpark,但它给了我一个错误:
我的代码是:
spark = pyspark.sql.SparkSession.builder\
.master("local[*]")\
.appName("MiAplicacionSpark")\
.config("spark.jars.packages", "org.apache.spark:spark-avro_2.12:3.5.3,org.apache.hadoop:hadoop-azure:3.2.0,com.microsoft.azure:azure-storage:8.6.0") \
.getOrCreate()
...
df = spark.read \
.format("jdbc") \
.option("url", jdbc_url) \
.option("dbtable", query) \
.option("user", username) \
.option("password", password) \
.option("fetchsize", "20000") \
.load()
df.write.format("avro").mode("overwrite").save(file_path + "_magic.avro")
错误是:
java.lang.NoClassDefFoundError:org/apache/spark/sql/internal/SQLConf$LegacyBehaviorPolicy$ 在 org.apache.spark.sql.avro.AvroOutputWriter。(AvroOutputWriter.scala:47) 在 org.apache.spark.sql.avro.AvroOutputWriterFactory.newInstance(AvroOutputWriterFactory.scala:43) 在 org.apache.spark.sql.execution.datasources.SingleDirectoryDataWriter.newOutputWriter(FileFormatDataWriter.scala:161) 在 org.apache.spark.sql.execution.datasources.SingleDirectoryDataWriter。(FileFormatDataWriter.scala:146) 在 org.apache.spark.sql.execution.datasources.FileFormatWriter$.executeTask(FileFormatWriter.scala:389) 在 org.apache.spark.sql.execution.datasources.WriteFilesExec.$anonfun$doExecuteWrite$1(WriteFiles.scala:100)
我的pyspark中的spark版本是3.5.3。
我找不到这个错误可能是什么。
提前致谢
这是Avro和Spark之间的兼容性问题。从spark.jars.packages中删除org.apache.spark:spark-avro_2.12:3.5.3,因为Spark最新版本中已经包含了它。其次使用最新的 Hadoop-Azure 版本“org.apache.hadoop:hadoop-azure:3.3.4”。刷新您的 Spark 会话,它将解决问题。