首页 > 解决方案 > Pyspark withColumn不返回数据框

问题描述

我有一个我解析的数据框'df'。

    from pyspark.sql.functions import regexp_extract, trim, lit 

    df2 = df.withColumn("value", regexp_extract("_c0", "(? 
    <=value':\s)\d+", 0))\
    .withColumn("time", regexp_extract("_c1", "(? 
    <=time':\su')\d\d:\d\d:\d\d(?=('}))", 0))\
    .show(truncate=False)

它返回

    +-------------+----------------------+-----+--------+
    |_c0          |_c1                   |value|time    |
    +-------------+----------------------+-----+--------+
    |{u'value': 76| u'time': u'00:36:32'}|76   |00:36:32|
    |{u'value': 77| u'time': u'00:36:42'}|77   |00:36:42|
    |{u'value': 76| u'time': u'00:36:47'}|76   |00:36:47|
    |{u'value': 77| u'time': u'00:36:57'}|77   |00:36:57|
    |{u'value': 78| u'time': u'00:37:02'}|78   |00:37:02|
    |{u'value': 77| u'time': u'00:37:07'}|77   |00:37:07|

当我尝试对 df2 进行更多操作时,我得到

    'NoneType' object has no attribute 'show'

为什么 df2 不再是我可以操作的数据框?

而不是 .show() 我尝试 .toDF() 并得到

    u"requirement failed: The number of columns doesn't 
    match.\nOld column names (4): _c0, _c1, value, time\nNew 
    column names (0): 

并且 .collect() 返回行。
我只想返回另一个数据框。

标签: dataframepyspark

解决方案


您在创建df2数据框时正在执行.show()操作,这就是不再是数据框的原因。df2

无需操作即可创建 df2 数据框.show()

>>> df2 = df.withColumn("value", regexp_extract("_c0", "(? 
    <=value':\s)\d+", 0))\
    .withColumn("time", regexp_extract("_c1", "(? 
    <=time':\su')\d\d:\d\d:\d\d(?=('}))", 0))

现在.show()在 df2 数据帧上执行:

>>> df2.show()

推荐阅读