1

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)

誰かがこの問題を解決するのを手伝ってくれませんか? 前もって感謝します :)

4

1 に答える 1

1

従う必要がある手順は次のとおりです。

  1. まず、コマンド os.environ['SPARK_CLASSPATH'] = "/usr/share/java/mysql-connector-java.jar" を使用して、mysql などのデータベースの 1 つの jar に SPARK_CLASSPATH を登録します。
  2. mysql データベースに対してクエリを実行し、RDD に割り当てます
  3. 上記のコマンドからパスを変更して、SPARK_CLASSPATH を 2 番目のデータベースの jar に登録します。
  4. 2 番目のデータベースに対してクエリを実行する

遅延評価に問題がある場合は、まず最初のデータ セットをファイルに書き込んでから先に進んでください。

于 2016-01-05T09:16:35.383 に答える