pysparkDataframe中的trim字符串列

d8tt03nd  于 2021-07-14  发布在  Spark
关注(0)|答案(5)|浏览(692)

我是python和spark的初学者。在创建 DataFrameCSV 文件,我想知道如何修剪列。我试过:

df = df.withColumn("Product", df.Product.strip())
``` `df` 是我的Dataframe, `Product` 是我表中的一列
但我总是看到错误: `Column object is not callable` 你有什么建议吗?
q35jwt9p

q35jwt9p1#

from pyspark.sql.functions import trim

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

ogsagwnx2#

从1.5版开始,spark sql提供了两个特定的函数来修剪空白, ltrim 以及 rtrim (在数据框文档中搜索“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 ')]
l0oc07j2

l0oc07j23#

pyspark版本的strip函数称为trim。trim将“为指定的字符串列从两端修剪空格”。确保先导入函数,然后将要修剪的列放入函数中。
以下应起作用:

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

luaexgnf4#

我是这样对待自由民主党的:

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|
+----------+----------+
xeufq47z

xeufq47z5#

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

from pyspark.sql import functions as f

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

相关问题