Подтвердить что ты не робот

Есть ли лучший способ отобразить весь Spark SQL DataFrame?

Я хотел бы отобразить весь Apache Spark SQL DataFrame с помощью API Scala. Я могу использовать метод show():

myDataFrame.show(Int.MaxValue)

Есть ли лучший способ отобразить весь DataFrame, чем использовать Int.MaxValue?

4b9b3361

Ответ 1

Как правило, не рекомендуется отображать весь DataFrame в stdout, потому что это означает, что вам нужно вытащить весь файл DataFrame (все его значения) в драйвер (если DataFrame уже является локальным, что вы можете проверить с помощью df.isLocal).

Если вы заранее не знаете, что размер вашего набора данных достаточно мал, поэтому для процесса JVM-драйвера достаточно памяти для размещения всех значений, это небезопасно. Вот почему DataFrame API show() по умолчанию показывает вам только первые 20 строк.

Вы можете использовать df.collect, который возвращает Array[T], а затем перебирает каждую строку и печатает ее:

df.collect.foreach(println)

но вы потеряете все форматирование, реализованное в df.showString(numRows: Int) (которое show() использует внутри).

Нет, я думаю, что лучшего способа нет.

Ответ 2

В одном из способов используется функция count() для получения общего количества записей и использования show(rdd.count()).

Ответ 3

Как и другие, печать всей DF - плохая идея. Тем не менее, вы можете использовать df.rdd.foreachPartition(f) для печати разделяемых разделов без наводнения драйвера JVM (y using collect)

Ответ 4

Ничего более сжатого, но если вы хотите избежать Int.MaxValue, вы можете использовать collect и обработать его, или foreach. Но для табличного формата без особого ручного кода show - лучшее, что вы можете сделать.

Ответ 5

В java Я пробовал это двумя способами. Это отлично работает для меня:

1.

data.show(SomeNo);

2.

data.foreach(new ForeachFunction<Row>() {
                public void call(Row arg0) throws Exception {
                    System.out.println(arg0);
                }
            });

Ответ 6

Попробуй,

df.show(35, ложь)

Он будет отображать 35 строк и 35 значений столбца с полным именем значения.

Ответ 7

Я пробовал show() и, похоже, иногда работает. Но иногда это не работает, просто попробуйте:

println(df.show())