Spark 2.4.5保存DataFrame为TFRecords格式报错求助
解决Spark 2.4.5保存DataFrame为TFRecords时的ClassNotFoundException问题
问题重现
执行以下代码保存Spark DataFrame为TFRecords格式:
df.write.format("tfrecords").mode("overwrite").save()
出现报错:
Py4JJavaError: An error occurred while calling o1095.save. : java.lang.ClassNotFoundException: Failed to find data source: tfrecords. Please find packages at http://spark.apache.org/third-party-projects.html
原因
Spark原生不支持TFRecords格式,需要引入第三方兼容的连接器依赖包。
解决方案
针对Spark 2.4.5版本,可通过以下方式解决:
方式一:启动Spark时指定依赖包
在提交Spark任务时,用--packages参数引入适配的依赖:spark-submit --packages org.tensorflow:spark-tensorflow-connector_2.11:1.15.0 your_pyspark_script.py注:Spark 2.4.5默认使用Scala 2.11,所以依赖包名中的
_2.11要对应;tensorflow connector版本选择1.15.0可与Spark 2.4.5兼容。方式二:在代码中配置依赖
创建SparkSession时,通过spark.jars.packages配置依赖:from pyspark.sql import SparkSession spark = SparkSession.builder \ .appName("SaveTFRecords") \ .config("spark.jars.packages", "org.tensorflow:spark-tensorflow-connector_2.11:1.15.0") \ .getOrCreate()方式三:手动添加jar包到Spark环境
下载对应版本的spark-tensorflow-connectorjar包,将其放置到Spark安装目录的jars文件夹下,重启Spark服务后即可生效。
完成上述操作后,重新执行保存TFRecords的命令即可正常运行。
内容的提问来源于stack exchange,提问作者waqar ali
相关产品推荐
相关产品推荐

