无法比较Spark SQL查询中的日期

时间:2015-05-06 12:34:18

标签: apache-spark apache-spark-sql pyspark

对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

将day column的类型更改为timestamp可以解决问题,但我必须保留原始架构。

1 个答案:

答案 0 :(得分:6)

查看Spark源代码中的relevant unit tests,看起来您需要一个显式的强制转换:

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

Spark SQL文档中没有任何迹象,但它似乎已在Transact-SQL和Hive中使用了一段时间。