环境:Spark 1.6,Scala
我试图从数据框架中获取一个DateTime字段,以在SparkSQL中进行比较。
val las_max_date_from_hive= hivecontext.sql("select min(SampleTime) max_SampleTime from mytable")
DF2 = hivecontext.sql ("select * from table2 where sampleDate >" + las_max_date_from_hive) // error here as las_max_date_from_hive is a DF
如何使DateTime脱离数据框并使用SQL?
谢谢
Hossain
它很简单-sql
返回数据框架,但是您确定它只有一个元素,因此您可以执行:
val last_max_date_from_hive = hivecontext.sql("select min(SampleTime) max_SampleTime from mytable")
val firstRow = last_max_date_from_hive.map {
// only value is important
case Row (value) => value.asInstanceOf[java.sql.Timestamp]; // cast to Date
}.first()
// we use SimpleDateFormat to parse to proper string format
val df2 = sqlContext.sql ("select * from mytable where SampleTime > cast('"
+ new java.text.SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS").format(firstRow)
+ "' as date)");
如果您不想解析时间戳对象,则可以使用from_unixtime
功能和getTime()
:
val firstRow = las_max_date_from_hive.map {
case Row (value) => value.asInstanceOf[java.sql.Timestamp].getTime() / 1000
}.first();
val df2 = sqlContext.sql ("select * from mytable where cast(SampleTime as timestamp) > from_unixtime(" + firstRow + ")")