【发布时间】:2020-11-10 20:15:57
【问题描述】:
尝试了不同的方法
sql
CREATE TABLE oracle_table
USING org.apache.spark.sql.jdbc
OPTIONS (
dbtable 'persons',
driver 'oracle.jdbc.driver.OracleDriver',
user '<user>',
password '<pass>',
url 'jdbc:oracle:thin://@<host>:1521/orcl')
以上代码返回正常
select * from oracle_table
抛出 java.sql.SQLRecoverableException:IO 错误:网络适配器无法建立连接
蟒蛇
jdbcUrl = "jdbc:oracle:thin:@<host>:1521/orcl"
properties = {
"user": "<user>",
"password": "<password>",
"driver": "oracle.jdbc.driver.OracleDriver"
}
pushdown_query = "( SELECT * FROM persons ) emp_alias"
df = spark.read.jdbc(url=jdbcUrl, table=pushdown_query, properties=properties)
df.printSchema()
返回
|-- PERSON_ID: decimal(38,10) (nullable = true)
|-- FIRST_NAME: string (nullable = true)
|-- LAST_NAME: string (nullable = true)
但是对于下面的代码
df.show()
抛出 java.sql.SQLRecoverableException:IO 错误:网络适配器无法建立连接
帮帮我!
【问题讨论】:
-
CREATE TABLE会直接跑掉吗?它可能是“延迟加载”,这意味着它在您实际从中选择之前不会运行。所以很可能问题实际上出在您的创建表中,而您的数据块实际上无法连接到<host>:1521。您确定您的数据块安装与 Oracle 服务器有网络连接吗? -
最初我遇到了连接错误,我已经更新了天蓝色的入站和出站规则,然后它能够从表
DESCRIBE persons加载元数据,如果存在连接问题,它还提供所有列和数据类型也不应该加载元数据!,这让我很困惑 -
@ChandraPrakash 您可以查看此处讨论的类似问题:stackoverflow.com/questions/52542816/…
-
%shtelnet 技巧非常方便,我必须记住那个 -
我发现问题防火墙仅对数据块的主节点启用,并且工作人员在私有 IP 中。这就是为什么我能够获取元数据但不能获取数据
标签: oracle pyspark apache-spark-sql azure-databricks