【问题标题】:Saving result of DataFrame show() to string in pyspark将 DataFrame show() 的结果保存到 pyspark 中的字符串
【发布时间】:2019-04-12 14:12:34
【问题描述】:

我想在pyspark中捕获show的结果,类似于herehere。我无法找到 pyspark 的解决方案,只有 scala。

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

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

【问题讨论】:

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


    【解决方案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 版本也没有。
    猜你喜欢
    • 1970-01-01
    • 2018-09-26
    • 2012-04-04
    • 2018-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-09
    • 1970-01-01
    相关资源
    最近更新 更多