df.show返回java.lang.ClassNotFoundException:org.postgresql.Driver
请仔细阅读,这不是重复的 我正在尝试通过AWS上的EMR访问RDS数据库。我是在齐柏林飞艇上做的:df.show返回java.lang.ClassNotFoundException:org.postgresql.Driver,postgresql,jdbc,pyspark,amazon-rds,amazon-emr,Postgresql,Jdbc,Pyspark,Amazon Rds,Amazon Emr,请仔细阅读,这不是重复的 我正在尝试通过AWS上的EMR访问RDS数据库。我是在齐柏林飞艇上做的: from pyspark.sql import SparkSession spark = SparkSession \ .builder \ .appName("Python Spark SQL basic example") \ .config("spark.jars", "/home/hadoop/postgresql
from pyspark.sql import SparkSession
spark = SparkSession \
.builder \
.appName("Python Spark SQL basic example") \
.config("spark.jars", "/home/hadoop/postgresql-42.2.18.jar") \
.getOrCreate()
df = spark.read \
.format("jdbc") \
.option("url", "jdbc:postgresql://host:5432/base") \
.option("dbtable", "tab") \
.option("user", "xx") \
.option("password", "xx") \
.option("driver", "org.postgresql.Driver") \
.load()
df.printSchema()
当我执行时,我得到了这个错误:
java.lang.ClassNotFoundException: org.postgresql.Driver
因此,我发现它运行良好,因为我可以看到表的模式(我在解释器配置中添加了spark.driver.extraClassPath变量):
但是,当我尝试执行df.show()
以查看表的内容时,它返回与以前相同的错误:
Py4JJavaError: An error occurred while calling o118.showString.
: org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 0.0 failed 4 times, most recent failure: Lost task 0.3 in stage 0.0 (TID 3, host, executor 1): java.lang.ClassNotFoundException: org.postgresql.Driver
at org.apache.spark.repl.ExecutorClassLoader.findClass(ExecutorClassLoader.scala:124)
at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
我不明白为什么我能看到模式而看不到内容
有什么帮助吗?谢谢。提交hadoop作业应用程序时,可以在任何工作节点(包括主节点)上创建主节点(取决于您的配置)。 如果您使用的是EMR,则默认情况下会在任何工作节点(核心节点)上创建应用程序主节点,但不会在主节点上创建 您的文件存在于
/home/hadoop/postgresql-42.2.18.jar
我假设这意味着主节点上。您的程序将在应用程序主节点所在的节点上搜索此文件,而它肯定不在主节点上,因为您不会得到任何错误
要解决这个问题:
hdfs://
。把它放在HDFS中,这是一个更好的选择。在这里,HDFS与所有核心和任务实例共享S3://
)PS:我不知道您在提交hadoop作业应用程序主节点时,如何使用spark.driver.extraClassPath查看架构(取决于您的配置)。 如果您使用的是EMR,则默认情况下会在任何工作节点(核心节点)上创建应用程序主节点,但不会在主节点上创建 您的文件存在于
/home/hadoop/postgresql-42.2.18.jar
我假设这意味着主节点上。您的程序将在应用程序主节点所在的节点上搜索此文件,而它肯定不在主节点上,因为您不会得到任何错误
要解决这个问题:
hdfs://
。把它放在HDFS中,这是一个更好的选择。在这里,HDFS与所有核心和任务实例共享S3://
)PS:我不知道如何使用
spark.driver.extraClassPath查看模式
我通过在齐柏林飞艇解释器菜单中添加以下参数解决了此问题:
spark.driver.extraClassPath=/home/hadoop/postgresql-42.2.18.jar
spark.jars.packages=org.postgresql:postgresql:42.2.18
我通过在齐柏林飞艇解释器菜单中添加以下参数来解决此问题:
spark.driver.extraClassPath=/home/hadoop/postgresql-42.2.18.jar
spark.jars.packages=org.postgresql:postgresql:42.2.18