我正在做一本书的练习,但它不喜欢 SQLContext.load 的使用方式。第一步使用特定参数启动pyspark:
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' object has no attribute 'load' ”
这本书似乎已经预料到了这一点,因为它说,“检查您正在使用的 Spark 版本的 API 文档,在最近的版本中,我们鼓励您使用DataFrameReader对象中的加载方法而不是SQLContext。”
所以我尝试了相同的例子,除了用“DataFrameReader”替换“sqlctx”:
>>> 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"
... )
然后我得到错误:“ TypeError: unbound method load() must be called with DataFrameReader instance as first parameter ( got nothing instead) ” 所以我怀疑我使用DataFrameReader不正确,但尽管浏览了文档我不能告诉正确的用法是什么。谁能告诉我我做错了什么?在此先感谢您的帮助。
(Spark 版本为 2.1.1)
SQLContext 不是为 spark 2.x 加载数据的首选方式;它的存在是为了向后兼容。spark.read.jdbc
在 spark 是 SparkSession 对象的地方使用。SparkSession 是一种最新的现代方式,可以访问以前封装在 SparkContext 和 SQLContext 中的几乎所有内容。我推荐 Jacek 的关于掌握 spark 的 git 书,作为当前 Spark API (2.x) 的非凡指南,并且实际上是关于 Spark 的一般。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句