【问题标题】:Trying to connect to Oracle from Spark尝试从 Spark 连接到 Oracle
【发布时间】:2017-03-13 16:27:50
【问题描述】:

我正在尝试将 Oracle 连接到 Spark,并希望从某些表和 SQL 查询中提取数据。但我无法连接到 Oracle。我尝试了不同的解决方法,但没有看。我已按照以下步骤操作。如果我需要进行任何更改,请纠正我。

我使用的是 Windows 7 机器。 我使用 Jupyter notebook 来使用 Pyspark。 我有 python 2.7 和 Spark 2.1.0。 我在环境变量中设置了一个 spark 类路径:

  SPARK_CLASS_PATH = C:\Oracle\Product\11.2.0\client_1\jdbc\lib\ojdbc6.jar

jdbcDF = sqlContext.read.format("jdbc").option("driver", "oracle.jdbc.driver.OracleDriver").option("url", "jdbc:oracle://dbserver:port# /database").option("dbtable","Table_name").option("user","username").option("password","password").load()

错误:

1.Py4JJava错误:

An error occurred while calling o148.load.
: java.sql.SQLException: Invalid Oracle URL specified

2.Py4JJava错误:

An error occurred while calling o114.load. : java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver

另一个场景:

  from pyspark import SparkContext, SparkConf
    from pyspark.sql import SQLContext
    ORACLE_DRIVER_PATH = "C:\Oracle\Product\11.2.0\client_1\jdbc\lib\ojdbc7.jar"                                            
    Oracle_CONNECTION_URL ="jdbc:oracle:thin:username/password@servername:port#/dbservicename"    
   conf = SparkConf()
   conf.setMaster("local")
   conf.setAppName("Oracle_imp_exp")       
   sqlContext = SQLContext(sc)
   ora_tmp=sqlContext.read.format('jdbc').options(
        url=Oracle_CONNECTION_URL,
        dbtable="tablename",
        driver="oracle.jdbc.OracleDriver"
        ).load() 

我遇到了错误。

Error: IllegalArgumentException: u"Error while instantiating org.apache.spark.sql.hive.HiveSessionState':"

请帮帮我。

【问题讨论】:

  • 我是 Spark 和 Python 的新手

标签: apache-spark-sql pyspark-sql oracleclient


【解决方案1】:

这个改动已经解决了。

   sqlContext = SQLContext(sc)
   ora_tmp=spark.read.format('jdbc').options(
        url=Oracle_CONNECTION_URL,
        dbtable="tablename",
        driver="oracle.jdbc.OracleDriver"
        ).load() 

【讨论】:

    【解决方案2】:

    我遵循以下代码,它对我有用。导入jdbc驱动(ojdbc6)。

        import org.apache.spark.sql.SparkSession
    
        object ConnectingOracleDatabase {
          def main(args: Array[String]): Unit = {
            val spark = SparkSession.builder()
              .appName("ConnectingOracleDatabase")
              .master("local")
              .getOrCreate()
    
        val jdbcDF = spark.read
          .format("jdbc")
          .option("url", "jdbc:oracle:thin:@localhost:1521:xe")
          .option("dbtable", "ADDRESS")
          .option("user", "system")
          .option("password", "oracle")
          .option("driver", "oracle.jdbc.OracleDriver")
          .load()
    
        jdbcDF.show()
    
      }
    }
    

    【讨论】:

    【解决方案3】:

    使用此设置:

    spark_session = ...
    
    
    
     
    emDF = spark_session.read \
            .format("jdbc") \
            .option("url", "jdbc:oracle:thin:@your_aliastns?TNS_ADMIN=path/to/wallet") \
            .option("dbtable", 'table_name or query') \
            .option("user", "user") \
            .option("password", "password") \
            .option("driver", "oracle.jdbc.driver.OracleDriver") \
            .load()
    

    记得查看ojbcX.jar并放入第一个钱包文件夹,即firstdfolder/secondfolder/walletfolder

    放入第一个文件夹。

    钱包文件夹包含别名 (tnsnames.ora) 验证!

    【讨论】:

      猜你喜欢
      • 2021-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-03
      • 2017-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多