【发布时间】:2020-08-14 16:38:19
【问题描述】:
我正在尝试通过 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(最近调用 最后)在 10 .option(“用户”,用户)\ 11 .option("密码", 密码) \ ---> 12 .option("驱动程序", "org.apache.hive.jdbc.HiveDriver") \ 13 .load()
/anaconda3/lib/python3.6/site-packages/pyspark/sql/readwriter.py 在 加载(自我、路径、格式、模式、**选项) 170返回self._df(self._jreader.load(self._spark._sc._jvm.PythonUtils.toSeq(路径))) 171 其他: --> 172 返回 self._df(self._jreader.load()) 173 第174章
/anaconda3/lib/python3.6/site-packages/py4j/java_gateway.py 在 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 in temp_args:
/anaconda3/lib/python3.6/site-packages/pyspark/sql/utils.py 在 装饰(*a, **kw) 61 def deco(*a, **kw): 62 尝试: ---> 63 返回 f(*a, **kw) 64 除了 py4j.protocol.Py4JJavaError 作为 e: 65 秒 = e.java_exception.toString()
/anaconda3/lib/python3.6/site-packages/py4j/protocol.py 在 get_return_value(answer, gateway_client, target_id, name) 第326章 327 “调用 {0}{1}{2} 时出错。\n”。 --> 328 格式(target_id, ".", name), value) 329 其他: 330引发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.JDBCRelation$.getSchema(JDBCRelation.scala:210) 在 org.apache.spark.sql.execution.datasources.jdbc.JdbcRelationProvider.createRelation(JdbcRelationProvider.scala:35) 在 org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(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(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.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(GatewayConnection.java:238) 在 java.lang.Thread.run(Thread.java:748)
我知道这是一个驱动相关的错误,试图改变其他蜂巢相关的驱动,但都是徒劳的,因为同样的错误仍然存在。我必须下载任何驱动程序。明确地或以任何其他方式链接它?
任何人都可以对这个问题有所了解并告诉我如何解决这个问题吗? 或者有没有其他方法可以实现?
【问题讨论】:
标签: python pyspark hive database-connection data-extraction