从CSV文件创建Spark DataFrame后,我想修剪一列。我试过了:
df = df.withColumn("Product", df.Product.strip())
df是我的数据框,Product是我的表中的一列。
df
Product
但我明白一个错误:列对象不可调用
oymdgrw71#
strip函数的PySpark版本称为trim从指定字符串列的两端修剪空格。
strip
trim
确保首先导入函数,并将要修剪的列放入函数中。
以下操作应该会起作用:
from pyspark.sql.functions import trim df = df.withColumn("Product", trim(df.Product))
pgky5nke2#
从版本1.5开始,Spark SQL提供了两个用于裁剪空白的特定函数:ltrim和rtrim(在DataFrame文档中搜索“trim”);您需要首先导入pyspark.sql.functions。下面是一个例子:
ltrim
rtrim
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 ')]
du7egjpx3#
如果需要对 Dataframe 中的所有列执行此操作。
from pyspark.sql import functions as f for colname in df.columns: df = df.withColumn(colname, f.trim(f.col(colname)))
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| +----------+----------+
4条答案
按热度按时间oymdgrw71#
strip
函数的PySpark版本称为trim
从指定字符串列的两端修剪空格。
确保首先导入函数,并将要修剪的列放入函数中。
以下操作应该会起作用:
pgky5nke2#
从版本1.5开始,Spark SQL提供了两个用于裁剪空白的特定函数:
ltrim
和rtrim
(在DataFrame文档中搜索“trim”);您需要首先导入pyspark.sql.functions
。下面是一个例子:du7egjpx3#
如果需要对 Dataframe 中的所有列执行此操作。
xfb7svmp4#
我是这样处理UDF的:
输出如下所示: