我正在從書中練習,但不喜歡SQLContext.load被使用的方式。第一步啓動具有特定參數的pyspark:SQLContext vs 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「。
所以,我試圖同樣的例子,除了用「sqlctx」與「DataFrameReader」:
>>> 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例如作爲被稱爲第一個參數(沒有任何代替)「所以我懷疑我錯誤地使用了DataFrameReader,但儘管查看了文檔,我無法確定它的正確用法。誰能告訴我我做錯了什麼?預先感謝您的幫助。
(火花版本2.1.1)
謝謝你,加倫。據我所知,一些論點也不一樣?例如,而不是「源」,spark.read.jdbc使用「url」代替 - 我想。 –
是的,方法是不同的。我寫了一篇博客文章,我相信這個話題的答案是這樣的,但是不想在我的答案中提供相關細節時不想鏈接。 – Garren
找到我的相關答案之一(不介意安全上下文):http ://stackoverflow.com/a/43358294/1942007 – Garren