Je suis débutant sur Python et Spark. Après avoir créé un DataFrame
à partir de CSV
fichier, je voudrais savoir comment je peux couper une colonne. I ' ve essayez:
df = df.withColumn("Product", df.Product.strip())
df
est mon bloc de données, Product
est une colonne de ma table
Mais je vois toujours l'erreur:
Column object is not callable
Avez-vous des suggestions?
À partir de la version 1.5 , Spark SQL fournit deux fonctions spécifiques pour rogner les espaces blancs, ltrim
et rtrim
(recherchez "trim" dans la documentation DataFrame ); vous devrez importer pyspark.sql.functions
première. Voici un exemple:
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 ')]
La version pyspark de la fonction strip est appelée trim. Trim "coupe les espaces des deux extrémités pour la colonne de chaîne spécifiée". Veillez à importer la fonction en premier et à placer la colonne que vous ajustez à l'intérieur de votre fonction.
Les éléments suivants devraient fonctionner:
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")))
J'ai fait ça avec l'UDF comme ça:
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'))
la sortie ressemble à ceci:
df.show()
df2.show()
+------------+------------+
| d1| d2|
+------------+------------+
| 2015-04-08 | 2015-05-10 |
+------------+------------+
+----------+----------+
| d1| d2|
+----------+----------+
|2015-04-08|2015-05-10|
+----------+----------+