我是Python和Spark的初学者。从DataFrame
文件创建CSV
后,我想知道如何修剪列。我试过了:
df = df.withColumn("Product", df.Product.strip())
df
是我的数据框,Product
是我表格中的一列
但我总是看到错误:
Column object is not callable
你有什么建议吗?
答案 0 :(得分:12)
从版本 1.5 开始,Spark SQL提供了两个用于修剪空白区域的特定功能,ltrim
和rtrim
(搜索"修剪"在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)))