Hola soy nuevo en la chispa de sql. Tengo un marco de datos como este.

  ---+----------+----+----+----+------------------------+
 |tag id|timestamp|listner| orgid |org2id|RSSI
 +---+----------+----+----+----+------------------------+
 |  4|1496745912| 362|   4|   3|                    0.60|
 |  4|1496745924|1901|   4|   3|                    0.60|
 |  4|1496746030|1901|   4|   3|                    0.60|
 |  4|1496746110| 718|   4|   3|                    0.30|
 |  2|1496746128| 718|   4|   3|                    0.60|
 |  2|1496746188|1901|   4|   3|                    0.10|

Quiero seleccionar para cada listner top 10 de los valores de marca de tiempo en la chispa de la sql.

He intentado de la siguiente consulta.Arroja errores.

  val avg = sqlContext.sql("select top 10 * from avg_table") // throws error.

  val avg = sqlContext.sql("select rssi,timestamp,tagid from avg_table order by desc limit 10")  // it prints only 10 records.

Quiero seleccionar para cada listner necesito tomar top 10 de los valores de marca de tiempo. Cualquier ayuda será apreciada.

InformationsquelleAutor Teju Priya | 2017-07-05

3 Comentarios

  1. 6

    No este trabajo?

    select rssi, timestamp, tagid
    from avg_table
    order by timestamp desc
    limit 10;

    EDICIÓN:

    Oh, lo siento. Desea row_number():

    select rssi, timestamp, tagid
    from (select a.*,
                 row_number() over (partition by listner order by timestamp desc) as seqnum
          from avg_table
         ) a
    where seqnum <= 10
    order by a.timestamp desc;
    • No para todos los listner valor necesito registros…por Lo que no trabajo
    • ¿qué es un.* ? en el código anterior ..
    • Acaba de una manera que no tiene lista de todas las columnas en la subconsulta.
  2. 0

    El uso de «límite» en la consulta. (límite de 10 en su caso)

    EXAMPLE: sqlContext.sql("SELECT text FROM yourTable LIMIT 10")

    O usted puede seleccionar todos los de la mesa y guardar los resultados DataFrame o conjunto de datos
    (o DDR, pero, entonces usted necesita llamar rdd.toDS() o a DF() método)
    A continuación, puedes llamar a mostrar(10) método.

    • Para cada listner necesito top 10 los registros.Así que la consulta anterior no funciona
  3. 0

    Aquí podemos utilizar dense_rank también

    select *
    from (select *,
                 dense_rank() over (partition by listner order by timestamp) as rank
          from avg_table
         ) 
    where rank <= 10;

    Diferencia Entre dense_rank() y row_number() es dense_rank() proporcionar el mismo rango/número de columnas coincidentes[en particiones se realiza] valores en varias fila donde como row_number() proporcionan el único número de la fila/rank a la coincidencia de los valores de la columna en varias filas

    Gracias

Dejar respuesta

Please enter your comment!
Please enter your name here