假设我有一列列名,例如:
col_list = ['col1','col2']
df = spark.read.json(path_to_file)
print(df.columns)
# ['col1','col2','col3']
我需要通过连接
col1
和col2
来创建一个新列。我不想在连接时硬编码列名称,而是需要从列表中选择。如何做到这一点?
假设我有一列列名,例如:
col_list = ['col1','col2']
df = spark.read.json(path_to_file)
print(df.columns)
# ['col1','col2','col3']
col1
和col2
来创建一个新列。我不想在连接时硬编码列名称,而是需要从列表中选择。您可以使用pyspark.sql.functions.concat()
函数将您在list
中指定的所有列连接起来。只需将它们作为参数传递。
from pyspark.sql.functions import concat
# Creating an example DataFrame
values = [('A1',11,'A3','A4'),('B1',22,'B3','B4'),('C1',33,'C3','C4')]
df = sqlContext.createDataFrame(values,['col1','col2','col3','col4'])
df.show()
+----+----+----+----+
|col1|col2|col3|col4|
+----+----+----+----+
| A1| 11| A3| A4|
| B1| 22| B3| B4|
| C1| 33| C3| C4|
+----+----+----+----+
在concat()
函数中,您需要传递需要连接的所有列 - 如concat('col1','col2')
。如果您有一个列表,可以使用*
将其解除列表形式。(*['col1','col2'])
因此返回('col1','col2')
col_list = ['col1','col2']
df = df.withColumn('concatenated_cols',concat(*col_list))
df.show()
+----+----+----+----+-----------------+
|col1|col2|col3|col4|concatenated_cols|
+----+----+----+----+-----------------+
| A1| 11| A3| A4| A111|
| B1| 22| B3| B4| B122|
| C1| 33| C3| C4| C133|
+----+----+----+----+-----------------+