使用MySQL的PySpark和JDBC驱动程序,我无法查询date类型的列。抛出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


将“日期”列的类型更改为时间戳可以解决此问题,但是我必须保留原始架构。

最佳答案

查看Spark源代码中的relevant unit tests,您似乎需要显式的强制转换:

select * from reports where day > cast('2015-05-01' as date)


Spark SQL文档中没有任何迹象表明,但是一段时间以来,Transact-SQL和Hive中似乎都可以使用它。

关于apache-spark - 无法在Spark SQL查询中比较日期,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30076888/

10-10 23:36