在变量中获取数据框列,如何



环境: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 + ")")

相关内容

  • 没有找到相关文章

最新更新