Pyspark – clasificación del dataframe de Hive por dos columnas rompe el dataframe.
Tengo un problema para ordenar un dataframe desde el contexto hive de HDFS. Estoy intentando ordenar un dataframe con una estructura similar a la siguiente:
+---+--------------+---------------+
| id|parameter_name|parameter_value|
+---+--------------+---------------+
|id1| name_en | value a |
|id1| name_il | value b |
|id1| address_en| value c |
|id1| address_il| value d |
|id2| name_il | value f |
|id2| name_en | value e |
|id2| address_il| value h |
|id1| address_en| value g |
+---+--------------+---------------+
Estoy tratando de ordenar este dataframe de tal manera que el id esté ordenado y la secuencia de nombres de parámetros en el dataframe para cada id sea la siguiente:
name_en
name_il
address_en
address_il
Tenga en cuenta que en el ejemplo esto no es así y los nombres y direcciones entre los id se invierten.
Intentar usar df.sort([‘id’, ‘parameter_name’]) produce resultados mezclados, mezclando aún más el dataframe y dividiendo el id a:
id1, name_en
id1, name_il
id2, name_il
id2, name_en
id1, address_en
id1, address_il
id2, address_il
id2, address_en
davy.ai
Para lograr el orden de clasificación deseado, puede crear un orden de clasificación personalizado y usarlo en la función
sort
. Así es como se puede hacer:Este código primero define un diccionario
order_dict
que mapea cadaparameter_name
a un orden de clasificación. Luego, agrega una nueva columnasort_order
al dataframe usando una declaración condicional que verifica siparameter_name
está enorder_dict
y le asigna el orden de clasificación correspondiente, de lo contrario le asigna el valor 5. Finalmente, ordena el dataframe porid
ysort_order
, y elimina la columnasort_order
para obtener el resultado final deseado.