PySpark pyspark.sql.functions.col和pyspark.sql.functions.lit之间的区别

时间:2017-09-24 04:10:40

标签: pyspark apache-spark-sql pyspark-sql

我发现很难理解pyspark.sql.functions中这两种方法之间的区别,因为PySpark官方网站上的文档信息量不大。例如,以下代码:

import pyspark.sql.functions as F
print(F.col('col_name'))
print(F.lit('col_name'))

结果是:

Column<b'col_name'>
Column<b'col_name'>

那么两者之间的区别是什么?我何时应该使用一个而不是另一个?

1 个答案:

答案 0 :(得分:10)

doc说:

西:

根据给定的列名返回一个列。

亮:

创建一个文字值列

假设我们有一个如下数据框:

>>> 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|
+---+

如果使用colA创建新列:

>>> df.withColumn("new", F.col("A")).show()
+---+---+
|  A|new|
+---+---+
|  a|  a|
|  b|  b|
|  c|  c|
+---+---+

因此col抓取具有给定名称的现有列,F.col("A")相当于此处的df.Adf["A"]

如果使用F.lit("A")创建列:

>>> df.withColumn("new", F.lit("A")).show()
+---+---+
|  A|new|
+---+---+
|  a|  A|
|  b|  A|
|  c|  A|
+---+---+

虽然lit将创建一个以给定字符串作为值的常量列。

它们都返回一个Column对象,但内容和含义不同。