Spark найти максимальный масштаб каждого столбца - PullRequest
0 голосов
/ 06 мая 2020

Это то, что я сделал до сих пор

private List<Integer> getScales(Dataset<Row> columnLengthDataFrame, 
                                Dataset<Row> df) {

    List<Integer> list = new ArrayList<>();

    for (int i = 0; i < columnLengthDataFrame.columns().length; i++) {
        Object data = df.first().get(i);
        String number = String.valueOf(data);
        if (number.contains(".")) {
            String scale = number.substring(number.indexOf(".")).substring(1);
            list.add(scale.length());
        }
    }

    return list;
}

Это дает масштаб только первой строки, и мне нужен максимальный масштаб того же столбца

enter image description here

В случае col1 я получаю шкалу 1, но мне нужен масштаб 6.

1 Ответ

0 голосов
/ 06 мая 2020

Вам не нужно выполнять никаких действий, чтобы это узнать. Его можно получить из схемы DataFrame.

Scala

df.schema.fields.collect { case StructField(_, typ: DecimalType, _, _) => typ.scale }

Java

Arrays.stream(df.schema().fields())
                .filter(f -> f.dataType().getClass().equals(DecimalType.class))
                .map(column -> ((DecimalType) column.dataType()).scale()).collect(Collectors.toList())
...