Получение столбца dataframe в переменной, как?

Окружающая Среда: Spark 1.6, Scala

Я пытаюсь получить одно поле datetime из dataframe для сравнения в 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 из dataframe и использовать в SQL?

Спасибо
Хоссейн

1 ответ

  1. Это просто-sqlвернуть DataFrame, но вы уверены, что он имеет только один элемент, так что вы можете сделать:

    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)");
    

    Если вы не хотите анализировать объект Timestamp, то вы можете использовать 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 + ")")