私は本の練習問題から取り組んでいますが、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のデータをロードするための好ましい方法ではない
ありがとう、ガーレン。私が知ることから、いくつかの議論も異なっていますか?例えば、 "source"の代わりに、spark.read.jdbcは代わりに "url"を使用します。 –
はい、方法が異なります。私はブログ記事を書いていますが、私はその話題については答えていると信じていますが、私の答えに関連する詳細を提供することができなければリンクしたくありませんでした – Garren
私の関連する回答が見つかりました(セキュリティコンテキストは気にしないでください):http :/ /stackoverflow.com/a/43358294/1942007 – Garren