使用pyspark和JDBC驱动程序对MySQL我无法查询类型日期的列。java.lang.classcastException被抛出。
sqlContext = SQLContext(sc)
df = sqlContext.load(source="jdbc", url=url, dbtable="reports")
sqlContext.registerDataFrameAsTable(df, "reports")
df.printSchema()
# root
# |-- id: integer (nullable = false)
# |-- day: date (nullable = false)
query = sqlContext.sql("select * from reports where day > '2015-05-01'")
query.collect() # ... most recent failure: ... java.lang.ClassCastException
将日列的类型更改为时间戳解决了问题,但是我必须保留原始架构。
查看火花源中相关的单元测试,看起来您需要明确的铸造:
select * from reports where day > cast('2015-05-01' as date)
在Spark SQL文档中没有它的迹象,但是它似乎已在Transact-SQL和Hive中使用了一段时间。