将 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

DataFrame 提取部分再转存为DataFrame

python 熊猫 - 将DataFrame保存到Excel

将 Pandas 数据框的选择保存到 csv [重复]

dataframegroupby怎么变为dataframe