Я хотел бы отобразить весь 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())