修剪PySpark Dataframe 中的字符串列

z31licg0  于 2022-09-21  发布在  Spark
关注(0)|答案(4)|浏览(216)

从CSV文件创建Spark DataFrame后,我想修剪一列。我试过了:

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

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

但我明白一个错误:
列对象不可调用

oymdgrw7

oymdgrw71#

strip函数的PySpark版本称为trim
从指定字符串列的两端修剪空格。

确保首先导入函数,并将要修剪的列放入函数中。

以下操作应该会起作用:

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

pgky5nke2#

从版本1.5开始,Spark SQL提供了两个用于裁剪空白的特定函数:ltrimrtrim(在DataFrame文档中搜索“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 ')]
du7egjpx

du7egjpx3#

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

from pyspark.sql import functions as f

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

xfb7svmp4#

我是这样处理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|
+----------+----------+

相关问题