我想在pyspark中捕获 show 的结果,类似于here和here。我只能使用scala找不到pyspark解决方案。
df.show()
#+----+-------+
#| age| name|
#+----+-------+
#|null|Michael|
#| 30| Andy|
#| 19| Justin|
#+----+-------+
最终目的是将其捕获为我的logger.info
中的字符串
我尝试了logger.info(df.show())
,它将仅显示在控制台上。
答案 0 :(得分:3)
您可以使用链接Capturing the result of explain() in pyspark的帖子中所示的相同方法来构建帮助程序功能。只需检查source code for show()
并观察它正在调用self._jdf.showString()
。
答案取决于您使用的是哪个版本的spark,因为show()
的参数数量随时间而变化。
在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))
从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)))
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))