在PySpark数据帧中修剪字符串列

问题描述 投票:11回答:4

我是Python和Spark的初学者。在从DataFrame文件创建CSV之后,我想知道如何修剪列。我试过了:

df = df.withColumn("Product", df.Product.strip())

df是我的数据框,Product是我表中的一列

但我总是看到错误:

Column object is not callable

你有什么建议吗?

apache-spark pyspark apache-spark-sql trim pyspark-sql
4个回答
12
投票

从版本1.5开始,Spark SQL提供了两个用于修剪空白区域的特定函数ltrimrtrim(在DataFrame documentation中搜索“trim”);你需要先导入pyspark.sql.functions。这是一个例子:

 from pyspark.sql import SQLContext
 from pyspark.sql.functions import *
 sqlContext = SQLContext(sc)

 df = sqlContext.createDataFrame([(' 2015-04-08 ',' 2015-05-10 ')], ['d1', 'd2']) # create a dataframe - notice the extra whitespaces in the date strings
 df.collect()
 # [Row(d1=u' 2015-04-08 ', d2=u' 2015-05-10 ')]
 df = df.withColumn('d1', ltrim(df.d1)) # trim left whitespace from column d1
 df.collect()
 # [Row(d1=u'2015-04-08 ', d2=u' 2015-05-10 ')]
 df = df.withColumn('d1', rtrim(df.d1))  # trim right whitespace from d1
 df.collect()
 # [Row(d1=u'2015-04-08', d2=u' 2015-05-10 ')]

8
投票

条带函数的pyspark版本称为trim。修剪将“修剪指定字符串列的两端空格”。确保首先导入该函数并将要修剪的列放入函数中。

以下应该有效:

from pyspark.sql.functions import trim
df = df.withColumn("Product", trim(df.Product))

6
投票
from pyspark.sql.functions import trim

df = df.withColumn("Product", trim(col("Product")))

5
投票

我用这样的udf做到了这一点:

from pyspark.sql.functions import udf

def trim(string):
    return string.strip()
trim=udf(trim)

df = sqlContext.createDataFrame([(' 2015-04-08 ',' 2015-05-10 ')], ['d1', 'd2'])

df2 = df.select(trim(df['d1']).alias('d1'),trim(df['d2']).alias('d2'))

输出看起来像这样:

df.show()
df2.show()
+------------+------------+
|          d1|          d2|
+------------+------------+
| 2015-04-08 | 2015-05-10 |
+------------+------------+

+----------+----------+
|        d1|        d2|
+----------+----------+
|2015-04-08|2015-05-10|
+----------+----------+
© www.soinside.com 2019 - 2024. All rights reserved.