😊
PySparkのcol関数の引数について
モチベーション
col("columnName")で指定されたcolumnNameの意味がわからなかったので確認した。
結果
下記のリンクにあるように、col("columnName") と指定した場合には、まだDataFrameとの関連付けがされていないcolの状態である。(A generic column no yet associated with a DataFrame.)
そこでWithcolumnメソッドなどの引数で使われた場合に、はじめてDataFrameとの関連付けが行われDataFrameの該当するカラムを得ることになる。
なお、colのカラム名をDataFrameのカラム名から見つけることができなかった場合に、AnalysisException: cannot resolve 'colname' given input columns:
となる。
from pyspark.sql.functions import col
df = df.withColumn('new_column_name', col("columnName"))
なお、余談であるが、リテラルのColumnオブジェクトを生成する場合には、lit関数を用いる。
from pyspark.sql.functions import lit
data = [('Alice', 13,),('Bob',17),('Taro',25)]
df = spark.createDataFrame(data,['name', 'age'])
df.show()
df = df.withColumn('newcol',lit('hoge'))
df.show()
+-----+---+
| name|age|
+-----+---+
|Alice| 13|
| Bob| 17|
| Taro| 25|
+-----+---+
+-----+---+------+
| name|age|newcol|
+-----+---+------+
|Alice| 13| hoge|
| Bob| 17| hoge|
| Taro| 25| hoge|
+-----+---+------+
Discussion