我正在尝试通过pyspark使用连接详细信息从服务器提取配置单元表。
代码如下:
from pyspark.sql.session import SparkSession
from pyspark import SparkContext
from pyspark.sql import SQLContext
database = "some_db_name"
table = "some_table_name"
user = "user"
password = "pwd"
# read table data into a spark dataframe
jdbcDF = spark.read.format("jdbc") \
.option("url", f"jdbc:hive2://dbslp_server:10159/{database};") \
.option("dbtable", table) \
.option("user", user) \
.option("password", password) \
.option("driver", "org.apache.hive.jdbc.HiveDriver") \
.load()
我基本上是尝试连接到一个包含配置单元表的服务器,同时使用配置单元驱动程序验证我的凭据到该服务器。但是,我得到以下错误:
py4jjavaerror traceback(最近一次调用last)in 10.option(“user”,user)\11.option(“password”,password)-->12.option(“driver”,“org.apache.hive.jdbc.hivedriver”)\13.load()
/anaconda3/lib/python3.6/site-packages/pyspark/sql/readwriter.py in load(self,path,format,schema,**options)170返回self.\u df(self.\u jreader.load(self.\u spark.\u sc.\u jvm.pythonutils.toseq(path)))171其他:-->172返回self.\u df(self.\u jreader.load())173 174@自(1.4)
/anaconda3/lib/python3.6/site-packages/py4j/java_gateway.py in call(self,*args)1255 answer=self.gateway_client.send_command(command)1256 return_value=get_return_value(->1257 answer,self.gateway_client,self.target_id,self.name)1258 1259 for temp_args中的temp_arg:
/anaconda3/lib/python3.6/site-packages/pyspark/sql/utils.py in deco(*a,**kw)61 def deco(*a,**kw):62 try:-->63返回f(*a,**kw)64,py4j.protocol.py4jjavaerror为e:65 s=e.java\u exception.tostring()
/anaconda3/lib/python3.6/site-packages/py4j/protocol.py in get\u return\u value(answer,gateway\u client,target\u id,name)326 raise py4jjavaerror(327“调用{0}{1}{2}时发生错误。\n”。-->328格式(target\u id,“.”,name),值)329 else:330 raise py4jerror(
py4jjavaerror:调用o623.load时出错:java.sql.sqlexception:org.apache.hive.jdbc.hivestatement.setquerytimeout(hivestatement)中不支持的方法。java:739)位于org.apache.spark.sql.execution.datasources.jdbc.jdbcrdd$.resolvetable(jdbcrdd)。scala:60)位于org.apache.spark.sql.execution.datasources.jdbc.jdbcreation$.getschema(jdbcreation。scala:210)在org.apache.spark.sql.execution.datasources.jdbc.jdbcrelationprovider.createrelation(jdbcrelationprovider)。scala:35)位于org.apache.spark.sql.execution.datasources.datasource.resolvererelation(datasource。scala:318)位于org.apache.spark.sql.dataframereader.loadv1source(dataframereader。scala:223)在org.apache.spark.sql.dataframereader.load(dataframereader。scala:211)位于org.apache.spark.sql.dataframereader.load(dataframereader。scala:167)在sun.reflect.generatedmethodaccessor12.invoke(未知源)在sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl。java:43)在java.lang.reflect.method.invoke(方法。java:498)在py4j.reflection.methodinvoker.invoke(methodinvoker。java:244)在py4j.reflection.reflectionengine.invoke(reflectionengine。java:357)在py4j.gateway.invoke(gateway。java:282)在py4j.commands.abstractcommand.invokemethod(abstractcommand。java:132)在py4j.commands.callcommand.execute(callcommand。java:79)在py4j.gatewayconnection.run(网关连接。java:238)在java.lang.thread.run(线程。java:748)
我知道这是一个与驱动程序相关的错误,试图更改其他与配置单元相关的驱动程序,但都是徒劳的,因为相同的错误仍然存在。我必须下载任何驱动程序吗。或者以其他方式链接它?
谁能告诉我怎么解决这个问题吗?或者我还有别的方法可以做到这一点吗?
1条答案
按热度按时间uqdfh47h1#
下载hivejdbjarhttps://repo1.maven.org/maven2/org/apache/hive/hive-jdbc/3.1.2/hive-jdbc-3.1.2.jar
将jar添加到spark的/jar目录。
重新启动服务器
运行你的Pypark工作
确保你的spark文件夹中有正确版本的jar
易趣-0.9.0.jar
httpclient-4.2.5.jar
httpcore-4.2.5.jar
commons-logging-1.1.3.jar
hive-common.jar
slf4j-api-1.7.5.jar
hive-metastore.jar
配置单元服务.jar
hadoop-common.jar
hive-jdbc.jar
Guava-11.0.2.jar