no se puede seleccionar el top 10 de los registros en sparksql

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 Kommentare

  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

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea