Pyspark withColumn不返回数据帧

时间:2018-11-03 06:31:29

标签: dataframe pyspark

我有一个解析的数据框“ 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不再是我可以操纵的数据框?

我尝试使用.toDF()代替.show()并获得

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

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

1 个答案:

答案 0 :(得分:0)

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

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

>>> 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))

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

>>> df2.show()