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

Ken*_*nny 4 python apache-spark apache-spark-sql pyspark

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

df.show()
#+----+-------+
#| age|   name|
#+----+-------+
#|null|Michael|
#|  30|   Andy|
#|  19| Justin|
#+----+-------+
Run Code Online (Sandbox Code Playgroud)

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

pau*_*ult 5

您可以使用链接捕获pyspark中的explain()的结果中所示的相同方法来构建帮助器函数。只需检查源代码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))
Run Code Online (Sandbox Code Playgroud)

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)))
Run Code Online (Sandbox Code Playgroud)

Spark版本1.3到1.4

show功能最初是在1.3版中引入的。

def getShowString(df, n=20):
    return(df._jdf.showString(n))
Run Code Online (Sandbox Code Playgroud)

现在,如下使用助手功能:

x = getShowString(df)  # default arguments
print(x)
#+----+-------+
#| age|   name|
#+----+-------+
#|null|Michael|
#|  30|   Andy|
#|  19| Justin|
#+----+-------+
Run Code Online (Sandbox Code Playgroud)

或您的情况:

logger.info(getShowString(df))
Run Code Online (Sandbox Code Playgroud)

  • 嗯,我收到错误 showString 不存在。调用 o10175.showString 时出错。跟踪: py4j.Py4JException:方法 showString([class java.lang.Integer]) 在 py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.java:318) 处不存在 py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.java:326) )在 py4j.Gateway.invoke(Gateway.java:274) (2认同)