删除 PySpark 数据框列中的最后几个字符

新手上路,请多包涵

我有一个 PySpark DataFrame。如何从下面的列 name 中删除/删除最后 5 个字符 -

 from pyspark.sql.functions import substring, length
valuesCol = [('rose_2012',),('jasmine_2013',),('lily_2014',),('daffodil_2017',),('sunflower_2016',)]
df = sqlContext.createDataFrame(valuesCol,['name'])
df.show()

+--------------+
|          name|
+--------------+
|     rose_2012|
|  jasmine_2013|
|     lily_2014|
| daffodil_2017|
|sunflower_2016|
+--------------+

我想创建 2 列,即 floweryear 列。

预期输出:

 +--------------+----+---------+
|          name|year|   flower|
+--------------+----+---------+
|     rose_2012|2012|     rose|
|  jasmine_2013|2013|  jasmine|
|     lily_2014|2014|     lily|
| daffodil_2017|2017| daffodil|
|sunflower_2016|2016|subflower|
+--------------+----+---------+

year 我创建的专栏-

 df = df.withColumn("year", substring(col("name"),-4,4))
df.show()
+--------------+----+
|          name|year|
+--------------+----+
|     rose_2012|2012|
|  jasmine_2013|2013|
|     lily_2014|2014|
| daffodil_2017|2017|
|sunflower_2016|2016|
+--------------+----+

我不知道如何砍掉最后 5 个字符,所以我只有花的名字。我通过调用 length 尝试了类似的方法,但这不起作用。

 df = df.withColumn("flower",substring(col("name"),0,length(col("name"))-5))

如何创建只有花名的 flower 列?

原文由 cph_sto 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 492
2 个回答

您可以使用 expr 函数

>>> from pyspark.sql.functions import substring, length, col, expr
>>> df = df.withColumn("flower",expr("substring(name, 1, length(name)-5)"))
>>> df.show()
+--------------+----+---------+
|          name|year|   flower|
+--------------+----+---------+
|     rose_2012|2012|     rose|
|  jasmine_2013|2013|  jasmine|
|     lily_2014|2014|     lily|
| daffodil_2017|2017| daffodil|
|sunflower_2016|2016|sunflower|
+--------------+----+---------+

原文由 Ali Yesilli 发布,翻译遵循 CC BY-SA 4.0 许可协议

您可以使用 split 函数。此代码执行您想要的操作:

 import pyspark.sql.functions as f

newDF = df.withColumn("year", f.split(df['name'], '_')[1]).\
           withColumn("flower", f.split(df['name'], '_')[0])

newDF.show()

+--------------+----+---------+
|          name|year|   flower|
+--------------+----+---------+
|     rose_2012|2012|     rose|
|  jasmine_2013|2013|  jasmine|
|     lily_2014|2014|     lily|
| daffodil_2017|2017| daffodil|
|sunflower_2016|2016|sunflower|
+--------------+----+---------+

原文由 Ali AzG 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题