Буквенно-цифровая сортировка в spark java

#java #apache-spark

Вопрос:

Мой вклад будет

 Id txtyp
1  1
2.  A1
3. A2
4. A3
 

Результат должен быть

 Id tx_typ
2.  A1
3. A2
4. A3
1. 1
 

Я попытался с помощью order by() и сортировки в spark java, но это не работает..любым другим способом или любой пользовательской сортировкой в spark java?

Комментарии:

1. Comparator.comparing(s -> s.replaceFirst("^\d", "z$0"))

Ответ №1:

Вы можете создать новый логический столбец is_numeric , значение которого true когда tx_typ равно числовому другому false . Затем вы сортируете по двум столбцам is_numeric и tx_typ . Наконец, вы удаляете is_numeric столбец.

Переведено в код, где input ваш ввод Dataset<Row> , который он вам дает:

 import static org.apache.spark.sql.functions.col;

...

input.withColumn("is_numeric", col("tx_typ").cast("int").isNotNull())
  .orderBy("is_numeric", "tx_typ")
  .drop("is_numeric");
 

Со следующим input набором данных строк:

  --- ------ 
|Id |tx_typ|
 --- ------ 
|1  |1     |
|2  |A1    |
|3  |A2    |
|4  |A3    |
 --- ------ 
 

Вы получаете следующий выходной набор данных строк:

  --- ------ 
|Id |tx_typ|
 --- ------ 
|2  |A1    |
|3  |A2    |
|4  |A3    |
|1  |1     |
 --- ------