我正在使用Spark连接到本地mysql实例。
我有一个我传入的mysql jdbc jar:
pyspark --jars /path/to/jar
我创建了我的SQLContext等等。我开始做连接的东西,一个版本抛出错误而另一个版本没有。
SQLContext.read.jdbc(url="jdbc:mysql://localhost:3306?user=root", table="spark.words")
这会引发找不到驱动程序的错误。
SQLContext.read.format("jdbc").option("url","jdbc:mysql://localhost:3306?user=root").option("dbtable","spark.words").option("driver", 'com.mysql.jdbc.Driver').load()
这可以按预期工作。
我认为这两者大致相同,前者是后者的便利方法。有什么区别以及为什么SQLContext.read.jdbc
版本出错?
答案 0 :(得分:1)
一般来说,这两种方法应该是等效的,尽管可能存在事物不能按预期工作的边界情况(例如DataFrameWriter
使用JDBC源似乎表示format("jdbc")
之间的行为略有不同和jdbc(...)
)。
在这种特殊情况下,答案很简单。这些调用不等效,因为第二个解决方案是明确声明驱动程序类,而第一个解决方案不是。
如果您希望它们的行为方式相同,则应提供properties
dict
:
sqlContext.read.jdbc(
url=..., table=...,
properties={"driver": "com.mysql.jdbc.Driver"})