Я хотел бы отобразить весь Apache Spark SQL DataFrame с помощью API Scala. Я могу использовать метод show()
:
myDataFrame.show(Int.MaxValue)
Есть ли лучший способ отобразить весь DataFrame, чем использовать Int.MaxValue
?
Я хотел бы отобразить весь Apache Spark SQL DataFrame с помощью API Scala. Я могу использовать метод show()
:
myDataFrame.show(Int.MaxValue)
Есть ли лучший способ отобразить весь DataFrame, чем использовать Int.MaxValue
?
Как правило, не рекомендуется отображать весь DataFrame в stdout, потому что это означает, что вам нужно вытащить весь файл DataFrame (все его значения) в драйвер (если DataFrame
уже является локальным, что вы можете проверить с помощью df.isLocal
).
Если вы заранее не знаете, что размер вашего набора данных достаточно мал, поэтому для процесса JVM-драйвера достаточно памяти для размещения всех значений, это небезопасно. Вот почему DataFrame API show()
по умолчанию показывает вам только первые 20 строк.
Вы можете использовать df.collect
, который возвращает Array[T]
, а затем перебирает каждую строку и печатает ее:
df.collect.foreach(println)
но вы потеряете все форматирование, реализованное в df.showString(numRows: Int)
(которое show()
использует внутри).
Нет, я думаю, что лучшего способа нет.
В одном из способов используется функция count()
для получения общего количества записей и использования show(rdd.count())
.
Как и другие, печать всей DF - плохая идея. Тем не менее, вы можете использовать df.rdd.foreachPartition(f)
для печати разделяемых разделов без наводнения драйвера JVM (y using collect)
Ничего более сжатого, но если вы хотите избежать Int.MaxValue
, вы можете использовать collect
и обработать его, или foreach
. Но для табличного формата без особого ручного кода show
- лучшее, что вы можете сделать.
В java
Я пробовал это двумя способами.
Это отлично работает для меня:
1.
data.show(SomeNo);
2.
data.foreach(new ForeachFunction<Row>() {
public void call(Row arg0) throws Exception {
System.out.println(arg0);
}
});
Попробуй,
df.show(35, ложь)
Он будет отображать 35 строк и 35 значений столбца с полным именем значения.
Я пробовал show() и, похоже, иногда работает. Но иногда это не работает, просто попробуйте:
println(df.show())