web-dev-qa-db-ja.com

pyspark.sql.functions.colとpyspark.sql.functions.litのPySparkの違い

PySpark公式ウェブサイトのドキュメントはあまり有益ではないので、pyspark.sql.functionsのこれら2つの方法の違いを理解するのは難しいと思います。たとえば、次のコード:

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

結果は次のとおりです。

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

では、2つの違いは何ですか?また、どちらを使用する必要があるのですか?

8
Jing

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オブジェクトを返しますが、内容と意味は異なります。

16
Psidom