私はPython and Spark。の初心者です。DataFrame
ファイルからCSV
を作成した後、列をトリミングする方法を知りたいと思います。 :
df = df.withColumn("Product", df.Product.strip())
df
はデータフレーム、Product
はテーブルの列です
しかし、私は常にエラーが表示されます:
Column object is not callable
何か提案はありますか?
バージョン1.5から開始、Spark= SQLは空白をトリミングするための2つの特定の関数ltrim
とrtrim
( DataFrameドキュメンテーション で「トリム」を検索);最初に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 ')]
Strip関数のpysparkバージョンは、trimと呼ばれます。 Trimは、「指定された文字列列の両端からスペースを削除します」。最初に関数をインポートし、トリミングする列を関数内に配置してください。
以下が動作するはずです:
from pyspark.sql.functions import trim
df = df.withColumn("Product", trim(df.Product))
from pyspark.sql.functions import trim
df = df.withColumn("Product", trim(col("Product")))
私はこのような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|
+----------+----------+