如何加入mysql和Oracle的SparkSQL数据



SparkSQL中是否可以连接mysql和Oracle数据库中的数据?我试图加入他们,但在SPARK_CLASSPATH中设置多个jar(mysql和Oracle的jdbc驱动程序)时遇到了一些问题。这是我的代码:

import os
import sys

os.environ['SPARK_HOME']="/home/x/spark-1.5.2"
sys.path.append("/home/x/spark-1.5.2/python/")
try:
    from pyspark import SparkContext, SparkConf
    from pyspark.sql import SQLContext
    MYSQL_DRIVER_PATH = "/home/x/spark-1.5.2/python/lib/mysql-connector-java-5.1.38-bin.jar"
    MYSQL_CONNECTION_URL = "jdbc:mysql://192.111.333.999:3306/db?user=us&password=pasw"
    ORACLE_DRIVER_PATH = "/home/x/spark-1.5.2/python/lib/ojdbc6.jar"
    Oracle_CONNECTION_URL = "jdbc:oracle:thin:user/pasw@192.111.333.999:1521:xe"
    # Define Spark configuration
    conf = SparkConf()
    conf.setMaster("local")
    conf.setAppName("MySQL_Oracle_imp_exp")
    # Initialize a SparkContext and SQLContext
    sc = SparkContext(conf=conf)
    #sc.addJar(MYSQL_DRIVER_PATH)
    sqlContext = SQLContext(sc)
    ora_tmp=sqlContext.read.format('jdbc').options(
        url=Oracle_CONNECTION_URL,
        dbtable="TABLE1",
        driver="oracle.jdbc.OracleDriver"
        ).load()
    ora_tmp.show()
    tmp2=sqlContext.load(
        source="jdbc",
        path=MYSQL_DRIVER_PATH,
        url=MYSQL_CONNECTION_URL,
        dbtable="(select city,zip from TABLE2 limit 10) as tmp2",
        driver="com.mysql.jdbc.Driver")
    c_rows=tmp2.collect()
   ....
except Exception as e:
    print  e
    sys.exit(1)

有人能帮我解决这个问题吗?提前感谢:)

以下是您需要遵循的步骤:

  1. 首先使用命令将SPARK_CLASSPATH注册到其中一个数据库(比如mysql)的jar中os.environg['SPARK_CLASSPATH']="/usr/share/java/mysql连接器java.jar"
  2. 对mysql数据库运行查询并分配给RDD
  3. 通过更改上面命令中的路径,将SPARK_CLASSPATH注册到第二个数据库的jar中
  4. 对第二个数据库运行查询

如果您对延迟求值有问题,请确保先将第一个数据集写入文件,然后再继续操作。

相关内容

  • 没有找到相关文章

最新更新