Получить вывод Spark org.apache.spark.sql.Dataset # show () в виде строки? - PullRequest
0 голосов
/ 17 декабря 2018

Есть ли способ получить вывод Dataset#show() как String?

Следующее выводит его на stdout, но мне интересно, смогу ли я извлечь его как String и зарегистрировать его несколько лучше:

val foobarData: DataFrame = ...

println("+++ foobarData.show(): +++") 
foobarData.show()

1 Ответ

0 голосов
/ 18 декабря 2018

В настоящее время нет способа сделать это, кроме как путем предоставления «средства доступа», то есть фрагмента кода в пакете org.apache.spark.sql, который будет использовать закрытый для пакета API:

package org.apache.spark.sql

object ShowAccessor {
  def show(ds: Dataset[_]): String = ds.showString(20)
}

Возможно, вы захотитечтобы иметь возможность указать другой набор параметров (showString имеет еще два параметра со значениями по умолчанию), но общая идея остается той же.

В качестве альтернативы, вы можете сделать выше с отражением, но это будеттребуется больше кода (особенно с отражением Scala), поэтому я лично предпочитаю подход с использованием методов доступа.

К сожалению, этот подход, вероятно, не будет работать с Java 9+ (конечно, когда Spark наконец его поддержит), потому что Java9+ обеспечивает более строгие границы модуля, чем Java 8 и старше.В этом случае, вероятно, потребуется доступ к этому API с использованием отражения.

В качестве примечания, я был очень удивлен, когда узнал, что общедоступный API Spark не обеспечивает вывод show() в строку.Я не вижу разумной причины для этого, и это доставляет много неудобств, например, если вы хотите напечатать фрейм данных с помощью регистратора SLF4J.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...