Spark Проверьте, есть ли хотя бы n элемент в наборе данных - PullRequest
0 голосов
/ 11 сентября 2018

Я использую Spark (2.3.1) для обработки некоторых наборов данных.По какой-то причине я хотел бы знать, достаточно ли данных в моем наборе данных перед выполнением моих вычислений.

Основное решение для этого заключается в следующем:

int count = myDataset.count();
int threshold = 100;

if (count>threshold){
    // compute
}else{
    System.out.println("Not enough data to do computation");
}

Но этодействительно неэффективно.Еще одно более эффективное решение - использовать функцию countApprox ().

int count = (long) (myDataset.rdd().countApprox(1000,0.90).getFinalValue().mean());

Но в моем случае это может быть намного эффективнее.

Как лучше всегорешить эту проблему?

Примечание:

  • Я думал, перебирая свои данные, вручную подсчитывая строки и останавливаясь, когда я достигаю порога, но я не уверен, что это лучшийрешение.

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

Если вы сделаете myDataset.count(), он будет сканировать полные данные и может работать медленно.

Чтобы ускорить это, вы можете сделать limit(threshold+1) для вашего набора данных.Это вернет вам другой набор данных с threshold+1 строками.В этом случае вы можете сделать .count().


    int threshold = 100;
    int totalRowsAfterLimit = myDataset.limit(threshold+1).count();

    if (totalRowsAfterLimit > threshold) {
        // compute
    } else {
        System.out.println("Not enough data to do computation");
    }

limit(threshold+1), чтобы убедиться, что ваша базовая работа читает только ограниченное количество записей, и она будет выполняться быстрее.

0 голосов
/ 14 сентября 2018

Может быть, «предел» может быть более эффективным:

df.limit(threshold).count()
...