Count of Dataframe без использования функции count [duplicate]

Вы должны использовать только один объект медиапланера

    public class PlayaudioActivity extends Activity {

        private MediaPlayer mp;

        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            Button b = (Button) findViewById(R.id.button1);
            Button b2 = (Button) findViewById(R.id.button2);
            final TextView t = (TextView) findViewById(R.id.textView1);

            b.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    stopPlaying();
                    mp = MediaPlayer.create(PlayaudioActivity.this, R.raw.far);
                    mp.start();
                }

            });

            b2.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    stopPlaying();
                    mp = MediaPlayer.create(PlayaudioActivity.this, R.raw.beet);
                    mp.start();
                }
            });
        }

        private void stopPlaying() {
            if (mp != null) {
                mp.stop();
                mp.release();
                mp = null;
           }
        }
    }
1
задан lovasoa 31 May 2017 в 11:31
поделиться

2 ответа

Вы можете попытаться использовать countApprox в RDD API, хотя это также запускает задачу Spark, она должна быть быстрее, поскольку она просто дает вам оценку истинного счета в течение определенного времени, которое вы хотите потратить (миллисекунды) и доверительный интервал (т. е. вероятность того, что истинное значение находится в этом диапазоне):

пример использования:

val cntInterval = df.rdd.countApprox(timeout = 1000L,confidence = 0.90)
val (lowCnt,highCnt) = (cntInterval.initialValue.low, cntInterval.initialValue.high)

Вам нужно немного сыграть с параметрами timeout и confidence. Чем выше тайм-аут, тем точнее расчетный счет.

4
ответ дан Raphael Roth 16 August 2018 в 03:53
поделиться
  • 1
    Большое вам спасибо, это именно то, что я искал. – lovasoa 31 May 2017 в 11:16
  • 2
    Небольшая точность. Если мне нравится, вам нужно только одно число, а не интервал, чем лучше установить доверие к 0 (и, таким образом, получить одно значение для низкого и высокого). Если вы используете высокое значение (например, значение по умолчанию 0,95), а затем используйте среднее значение low и high, результат будет менее точным. – lovasoa 14 June 2017 в 21:57
  • 3
    Я пробовал это на больших наборах данных и, похоже, не экономит много (если есть ..) время. – javadba 9 July 2018 в 13:09

Если у вас действительно огромное количество записей, вы можете получить приблизительный счет, используя что-то вроде HyperLogLog , и это может быть быстрее, чем count(). Однако вы не сможете получить никакого результата, не отпуская работу.

При использовании Spark существуют два типа операций RDD: преобразования и действия . Грубо говоря, преобразования меняют RDD и возвращают новый RDD. Действия вычисляют или генерируют некоторый результат. Преобразования лениво оцениваются, поэтому они не запускают работу, пока действие не будет вызвано действием в конце последовательности преобразований.

Поскольку Spark является распределенной структурой программирования, для выполнения заданий много накладных расходов. Если вам нужно что-то, что больше похоже на «реальное время», что бы это ни значило, используйте базовую Scala (или Python), если ваши данные достаточно малы или перейдут на потоковый подход и сделайте что-то вроде обновления счетчика по мере прохождения новых записей.

1
ответ дан Metropolis 16 August 2018 в 03:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: