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

Jin*_*ing 8 apache-spark-sql pyspark pyspark-sql

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

import pyspark.sql.functions as F
print(F.col('col_name'))
print(F.lit('col_name'))
Run Code Online (Sandbox Code Playgroud)

结果是:

Column<b'col_name'>
Column<b'col_name'>
Run Code Online (Sandbox Code Playgroud)

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

Psi*_*dom 16

文档说:

西:

返回基于给定列名称的列.

点亮:

创建一个字面值的列


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

>>> 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|
+---+
Run Code Online (Sandbox Code Playgroud)

如果col用于创建新列A:

>>> df.withColumn("new", F.col("A")).show()
+---+---+
|  A|new|
+---+---+
|  a|  a|
|  b|  b|
|  c|  c|
+---+---+
Run Code Online (Sandbox Code Playgroud)

因此,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|
+---+---+
Run Code Online (Sandbox Code Playgroud)

同时lit将创建一个以给定字符串作为值的常量列.

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