2016-04-08 4 views
3

SparkでJDBCを使用して(Azureの)MS SQLテーブルから読み込み、それをパーケットファイル(ローカルまたはS3)に保存しようとしています。私はこれをローカルで作業していますが、SparkがEC2上にある場合は動作させることができません。コンフィグレーションファイルを使用しない起動時にPySparkにJDBCドライバを追加する

私は手動で私の火花-defaults.confにファイルを開いて、これを追加しますので、私の地元のバージョンが動作します**:

spark.driver.extraClassPath /Users/<my_user>/spark-1.6.1-bin-hadoop2.4/lib/postgresql-9.4.1208.jre6.jar:/Users/<my_user>/spark-1.6.1-bin-hadoop2.4/lib/sqljdbc4.jar 

**私はEC2を使用して、この特定のユースケース

ためMSSQL必要がI

wget https://download.microsoft.com/download/0/2/A/02AAE597-3865-456C-AE7F-613F99F850A8/sqljdbc_6.0.7130.100_enu.tar.gz 

tar -xf sqljdbc_6.0.7130.100_enu.tar.gz 

ls 

./spark/bin/pyspark --packages com.databricks:spark-csv_2.11:1.2.0 --driver-class-path "/root/sqljdbc_6.0/enu/sqljdbc4.jar" 

その後Pythonの内、私はこれを行うから:

次の操作を行ってみました正しく表示され、それ以来

my_jdbc_test.write.save("my_jdbc_test", format="parquet") 

No suitable driver found for jdbc:sqlserver://<my_server>.cloudapp.net:<port_num>;DatabaseName=<my_db>;user=<my_user>;password=<my_password>; 

:私はドライバのエラーを取得し、寄木細工のファイルとして私のローカルディスクに保存しようとすると、しかし

>>> my_jdbc_test.printSchema() 
root 
|-- my_var1: string (nullable = true) 
|-- my_var2: string (nullable = true) 
|-- my_var3: string (nullable = false) 

>>> 

:正しく

スキーマを表示しますそのスキーマは、jarファイルがマスターに追加されたと仮定していますが、おそらくエラーの原因はワーカーノードにプッシュされていないということですか?私はトンを探して何も見つけることができませんでした。

ありがとうございます。

+0

try:my_jdbc_test.write.save( "my_jdbc_test.parquet"、format = "parquet")? –

答えて

0

問題情報によると、SQLデータベースドライバ&接続文字列によって発生しています。 jdbcドライバ&の接続文字列は、PythonではなくJavaに使用されます。

odbcドライバとPython用の接続文字列を使用する必要があります。をインストールして、http://pymssql.org/en/stable/のドキュメントを参照してSQLデータベースにアクセスしてください。

Pythonを使用したODBCの接続文字列は次のとおりです。あなたは、JDBCドライバと接続文字列を使用する必要がある場合

Driver={SQL Server Native Client 10.0};Server=tcp:<your-server>.database.windows.net,1433;Database=<my_db>;Uid=<your-username>@<your-server>;Pwd={your_password_here};Encrypt=yes;Connection Timeout=30;

、あなたはJythonの代わりにPythonで使用して文書Databases and Jython: Object Relational Mapping and Using JDBCを参照しようとすることができます。

ご不明な点がございましたら、お気軽にお問い合わせください。

+0

こんにちは@ピーター、返信いただきありがとうございます。 –

+0

設定ファイルを変更するとJDBCがうまく動作するので、私はあなたの答えに戸惑います(上記の私のローカルの例)。私は単にコマンドライン経由で初期化中にそれを指し示そうとしているだけで、設定ファイルではありません。私にとっては、これは実際にはJDBCの質問ではありません。すべて正常に動作するからです。これはPySparkの初期化に関する質問です。スタートアップ時にすべてのノードにJDBCドライバを取得するJARファイルを指すにはどうすればいいですか?私はドライバをマスター上で動作させているか、 'printSchema()'が動作しません。 –

関連する問題