pyspark.sql.functions.col 和 pyspark.sql.functions.lit 之间的 PySpark 区别
Posted
技术标签:
【中文标题】pyspark.sql.functions.col 和 pyspark.sql.functions.lit 之间的 PySpark 区别【英文标题】:PySpark difference between pyspark.sql.functions.col and pyspark.sql.functions.lit 【发布时间】:2017-09-24 04:10:39 【问题描述】:我很难从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】:doc 说:
col:
根据给定的列名返回一个列。
点亮:
创建一个字面值列
如果我们有如下的数据框:
>>> 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|
+---+
如果使用col
从A
创建一个新列:
>>> df.withColumn("new", F.col("A")).show()
+---+---+
| A|new|
+---+---+
| a| a|
| b| b|
| c| c|
+---+---+
所以col
抓取具有给定名称的现有列,F.col("A")
在此处等效于df.A
或df["A"]
。
如果使用F.lit("A")
创建列:
>>> df.withColumn("new", F.lit("A")).show()
+---+---+
| A|new|
+---+---+
| a| A|
| b| A|
| c| A|
+---+---+
而lit
将创建一个以给定字符串作为值的常量列。
两者都返回一个Column对象,但内容和含义不同。
【讨论】:
很好地解释和“图解”。我想知道,给定标识符myLit
和myCol
,分别由F.lit(...)
和F.col(...)
创建,是否可以询问他们以了解他们未来的解释是什么。又或许它是由 Catalyst 创造并深埋的绑定。两者的dir(...)
没有任何区别,尽管这个例子证明存在。以上是关于pyspark.sql.functions.col 和 pyspark.sql.functions.lit 之间的 PySpark 区别的主要内容,如果未能解决你的问题,请参考以下文章