#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 |
--- ------