2017-05-20 8 views
1

私は本の練習問題から取り組んでいますが、SQLContext.loadが使用されているのは好きではありません。最初の手順では、特定のパラメータを持つpysparkを起動します。SQLContextとDataFrameLoader

pyspark --driver-class-path /usr/share/java/mysql-connector-java-5.1.39-bin.jar --master local 

これは問題ありません。次に、インポート:

from pyspark.sql import SQLContext 
sqlctx = SQLContext(sc) 

その後論争一部くる:今

>>> employeesdf = sqlctx.load(source="jdbc", 
... url="jdbc:mysql://localhost:3306/employees?user=<user>&password=<pwd>", 
... dbtable="employees", 
... partitionColumn="emp_no", 
... numPartitions="2", 
... lowerBound="10001", 
... upperBound="499999" 
...) 

が、私はの終わりにemployees.rdd.getNumPartitions()ではなく前にこれをフォローアップすることになっています以前の文字列、私はエラーが出る「はAttributeError: 『をSQLContext』オブジェクトには、属性 『ロード』はありません」それはスパークのバージョンのAPIのマニュアルを参照してください」と言うので、

本はこれを予想しているようだが、あなたより多くのあなたはロードメソッドをDataFrameReaderオブジェクトの代わりに SQLContextの使用することをお勧めします。 DataFrameReaderインスタンスとしてで呼び出される必要があり、非結合方式の負荷(): "例外TypeError:私は、エラーを取得する

>>> employeesdf = DataFrameReader.load(source="jdbc", 
... url="jdbc:mysql://localhost:3306/employees?user=<user>password=<pwd>", 
... dbtable="employees", 
... partitionColumn="emp_no", 
... numPartitions="2", 
... lowerBound="10001", 
... upperBound="499999" 
...) 

は、だから私は「DataFrameReader」と「sqlctx」を置き換える以外は同じ例を試してみました
"私は DataFrameReaderを間違って使っていると思われますが、ドキュメントを見ても正しい使い方が分かりません。誰かが私が間違っていることを教えてもらえますか?ご協力いただきましてありがとうございます。

SQLContextスパーク2.xのデータをロードするための好ましい方法ではない

答えて

1

(Sparkのバージョンが2.1.1です)。後方互換性のために存在します。 spark.read.jdbcを使用します。ここで、sparkはSparkSessionオブジェクトです。 SparkSessionは、以前はSparkContextとSQLContextにカプセル化されていたすべてのものにアクセスする最新かつ最新の方法です。私は現在のSpark APIs(2.x)への驚異的なガイドと、スパークに関する一般的なすべてのことについて、Jacekのgit bookをmastering sparkに関してお勧めします。

+0

ありがとう、ガーレン。私が知ることから、いくつかの議論も異なっていますか?例えば、 "source"の代わりに、spark.read.jdbcは代わりに "url"を使用します。 –

+0

はい、方法が異なります。私はブログ記事を書いていますが、私はその話題については答えていると信じていますが、私の答えに関連する詳細を提供することができなければリンクしたくありませんでした – Garren

+0

私の関連する回答が見つかりました(セキュリティコンテキストは気にしないでください):http :/ /stackoverflow.com/a/43358294/1942007 – Garren

関連する問題