web-dev-qa-db-ja.com

PySparkデータフレームの文字列列をトリムする

私はPython and Spark。の初心者です。DataFrameファイルからCSVを作成した後、列をトリミングする方法を知りたいと思います。 :

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

dfはデータフレーム、Productはテーブルの列です

しかし、私は常にエラーが表示されます:

Column object is not callable

何か提案はありますか?

16
minh-hieu.pham

バージョン1.5から開始、Spark= SQLは空白をトリミングするための2つの特定の関数ltrimrtrimDataFrameドキュメンテーション で「トリム」を検索);最初に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 ')]
12
desertnaut

Strip関数のpysparkバージョンは、trimと呼ばれます。 Trimは、「指定された文字列列の両端からスペースを削除します」。最初に関数をインポートし、トリミングする列を関数内に配置してください。

以下が動作するはずです:

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

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

私はこのような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|
+----------+----------+
5
Babu