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.A或df["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对象,但内容和含义不同.
| 归档时间: |
|
| 查看次数: |
7447 次 |
| 最近记录: |