J'ai du mal à comprendre la différence entre ces deux méthodes de pyspark.sql.functions
car la documentation sur le site officiel de PySpark n'est pas très informative. Par exemple, le code suivant:
import pyspark.sql.functions as F
print(F.col('col_name'))
print(F.lit('col_name'))
Les résultats sont:
Column<b'col_name'>
Column<b'col_name'>
alors quelle est la différence entre les deux et quand dois-je utiliser l'un et pas l'autre?
Le doc dit:
col:
Renvoie une colonne basée sur le nom de colonne donné.
allumé:
Crée une colonne de valeur littérale
Dites si nous avons un bloc de données comme ci-dessous:
>>> import pyspark.sql.functions as F
>>> from pyspark.sql.types import *
>>> schema = StructType([StructField('A', StringType(), True)])
>>> df = spark.createDataFrame([("a",), ("b",), ("c",)], schema)
>>> df.show()
+---+
| A|
+---+
| a|
| b|
| c|
+---+
Si vous utilisez col
pour créer une nouvelle colonne à partir de A
:
>>> df.withColumn("new", F.col("A")).show()
+---+---+
| A|new|
+---+---+
| a| a|
| b| b|
| c| c|
+---+---+
Donc col
saisit une colonne existante avec le nom donné, F.col("A")
est équivalent à df.A
Ou df["A"]
Ici.
Si vous utilisez F.lit("A")
pour créer la colonne:
>>> df.withColumn("new", F.lit("A")).show()
+---+---+
| A|new|
+---+---+
| a| A|
| b| A|
| c| A|
+---+---+
Tandis que lit
créera une colonne constante avec la chaîne donnée comme valeurs.
Les deux retournent un objet Column mais le contenu et la signification sont différents.