将DataFrame show()的结果保存到pyspark中的字符串

时间:2019-04-12 14:12:35

标签: python apache-spark pyspark apache-spark-sql

我想在pyspark中捕获 show 的结果,类似于herehere。我只能使用scala找不到pyspark解决方案。

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

最终目的是将其捕获为我的logger.info中的字符串 我尝试了logger.info(df.show()),它将仅显示在控制台上。

1 个答案:

答案 0 :(得分:3)

您可以使用链接Capturing the result of explain() in pyspark的帖子中所示的相同方法来构建帮助程序功能。只需检查source code for 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))