将 DataFrame show() 的结果保存到 pyspark 中的字符串
Posted
技术标签:
【中文标题】将 DataFrame show() 的结果保存到 pyspark 中的字符串【英文标题】:Saving result of DataFrame show() to string in pyspark 【发布时间】:2019-04-12 14:12:34 【问题描述】:我想在pyspark中捕获show的结果,类似于here和here。我无法找到 pyspark 的解决方案,只有 scala。
df.show()
#+----+-------+
#| age| name|
#+----+-------+
#|null|Michael|
#| 30| Andy|
#| 19| Justin|
#+----+-------+
最终目的是将其捕获为我的logger.info
中的字符串
我试过logger.info(df.show())
,它只会显示在控制台上。
【问题讨论】:
【参考方案1】:您可以使用链接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))
【讨论】:
嗯,我收到一个错误 showString 不存在。调用 o10175.showString 时出错。跟踪:py4j.Py4JException:方法 showString([class java.lang.Integer]) 在 py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.java:326) 的 py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.java:318) 中不存在) 在 py4j.Gateway.invoke(Gateway.java:274) @Kenny 什么版本的 spark (print(spark.version)
)?您必须使用特定于您的 spark 版本的函数版本。
2.2 版。请忽略错误。我在 n 和 20 之间混淆了。那里应该有 2 个参数。很好的答案,谢谢@pault
令人难以置信的是他们自己还没有提供这样的辅助函数,即使是 3.x 版本也没有。以上是关于将 DataFrame show() 的结果保存到 pyspark 中的字符串的主要内容,如果未能解决你的问题,请参考以下文章
将 Dataframe 保存到 csv 直接保存到 s3 Python