Сохранение результата DataFrame show () в строку в pyspark - PullRequest
3 голосов
/ 12 апреля 2019

Я хотел бы захватить результат show в pyspark, аналогично здесь и здесь . Мне не удалось найти решение с помощью pyspark, только scala.

df.show()
#+----+-------+
#| age|   name|
#+----+-------+
#|null|Michael|
#|  30|   Andy|
#|  19| Justin|
#+----+-------+

Конечная цель состоит в том, чтобы захватить это как строку в моем logger.info Я попытался logger.info(df.show()), который будет отображаться только на консоли.

1 Ответ

3 голосов
/ 12 апреля 2019

Вы можете создать вспомогательную функцию, используя тот же подход, который показан в сообщении, которое вы связали Захват результата объяснения () в pyspark .Просто изучите исходный код для show() и обратите внимание, что он вызывает self._jdf.showString().

Ответ зависит от того, какую версию spark вы используете, в качестве количества аргументов show() со временем изменилось.

Spark версии 2.3 и выше

В версии 2.3 был добавлен аргумент vertical.

def getShowString(df, n=20, truncate=True, vertical=False):
    if isinstance(truncate, bool) and truncate:
        return(df._jdf.showString(n, 20, vertical))
    else:
        return(df._jdf.showString(n, int(truncate), vertical))

Spark Версии 1.5 - 2.2

Начиная с версии 1.5, был добавлен аргумент truncate.

def getShowString(df, n=20, truncate=True):
    if isinstance(truncate, bool) and truncate:
        return(df._jdf.showString(n, 20))
    else:
        return(df._jdf.showString(n, int(truncate)))

Версии Spark от 1.3 до 1.4

Функция show впервые была представлена ​​в версии 1.3.

def getShowString(df, n=20):
    return(df._jdf.showString(n))

Теперь используйте вспомогательную функцию следующим образом:

x = getShowString(df)  # default arguments
print(x)
#+----+-------+
#| age|   name|
#+----+-------+
#|null|Michael|
#|  30|   Andy|
#|  19| Justin|
#+----+-------+

Или в вашем случае:

logger.info(getShowString(df))
...