在CLI中,我移至hadoop目录(在EMR中)并下载了ojdbc.jar文件。我尝试使用下面的spark shell命令连接Oracle DB:
pyspark \
--jars "/home/hadoop/ojdbc6.jar" \
--master yarn-client \
--num-executors 5 \
--driver-memory 14g \
--executor-memory 14g \
df = spark.read \
.format("jdbc") \
.option("url", "jdbc:oracle:thin:USER/HOST@//IP:PORT/SERVICE") \
.option("dbtable", "TABLE") \
.option("user", "USER") \
.option("password", "PASSWORD") \
.option("driver", "oracle.jdbc.driver.OracleDriver") \
.load()
它正在工作,但是使用终端对我来说不方便。因此,我想将EMR笔记本连接到Oracle DB并尝试以下代码:
from pyspark import SparkContext, SparkConf
spark_conf = SparkConf().setAll([('spark.pyspark.python', 'python3'),
('spark.pyspark.virtualenv.enabled', 'true'),
('spark.pyspark.virtualenv.type', 'native'),
('spark.pyspark.virtualenv.bin.path', '/usr/bin/virtualenv'),
('spark.driver.extraClassPath', '/home/hadoop/ojdbc6.jar')])\
.setAppName('SparkJob')
sc = SparkContext.getOrCreate(conf=spark_conf)
df = sqlContext.read \
.format("jdbc") \
.options(url="jdbc:oracle:thin:USER/HOST@//IP:PORT/SERVICE",
dbtable="TABLE",
user="USER",
password="PASSWORD",
driver = "oracle.jdbc.driver.OracleDriver") \
.load()
并得到一个错误:
An error occurred while calling o97.load.
: java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver
为了从EMR Jupyter Notebook连接到Oracle DB,有没有遗漏的步骤?
您可以使用此解决方案,首先将jdbc驱动程序上载到s3存储桶并复制链接,然后可以在第一个单元格(首先要执行)中指定jar文件。例如,我为ms sql jdbc驱动程序执行了此操作(您在此需要oracle)。
%%configure -f
{
"conf": {
"spark.jars": "s3://jar-test/mssql-jdbc-8.4.0.jre8.jar"
}
}
另外,这是从jdbc读取的代码段。
from pyspark import SparkConf, SparkContext
from pyspark.sql import SQLContext, SparkSession, Window, DataFrame,Row
spark_session = SparkSession\
.builder\
.appName("test") \
.getOrCreate()
spark_context = spark_session.sparkContext
sql_context = SQLContext(spark_context)
df = sql_context.read.format("jdbc") \
.option("url", "jdbc:sqlserver://<public-dns>:<port>") \
.option("driver", "com.microsoft.sqlserver.jdbc.SQLServerDriver") \
.option("dbtable","<table-name>") \
.option("user", "<username>") \
.option("password", "<password>") \
.load()
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句