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

时间:2016-02-02 14:15:10

标签: apache-spark pyspark apache-spark-sql trim pyspark-sql

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

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

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

但我总是看到错误:

Column object is not callable

你有什么建议吗?

5 个答案:

答案 0 :(得分:12)

从版本 1.5 开始,Spark SQL提供了两个用于修剪空白区域的特定功能,ltrimrtrim(搜索"修剪"在DataFrame documentation);您需要先导入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 ')]

答案 1 :(得分:8)

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

以下内容应该有效:

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

答案 2 :(得分:6)

from pyspark.sql.functions import trim

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

答案 3 :(得分: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|
+----------+----------+

答案 4 :(得分:0)

如果需要对数据框中的所有列执行此操作。

from pyspark.sql import functions as f

for colname in df.columns:
    df = df.withColumn(colname, f.trim(f.col(colname)))