it-swarm.com.ru

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

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

myDataFrame.show(Int.MaxValue)

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

29
Yuri Brovman

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

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

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

df.collect.foreach(println)

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

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

51
Grega Kešpret

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

3
AkshayK

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

2
ayan guha

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

1
Justin Pihony

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

1.  

data.show(SomeNo);

2.  

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