使用pyspark连接数据框的多列

Ami*_*wat 1 apache-spark apache-spark-sql pyspark

假设我有一个列列表,例如:

col_list = ['col1','col2']
df = spark.read.json(path_to_file)
print(df.columns)
# ['col1','col2','col3']
Run Code Online (Sandbox Code Playgroud)

我需要通过串联col1和来创建一个新列col2。我不想在连接时对列名进行硬编码,但需要从列表中选择。

我怎样才能做到这一点?

cph*_*sto 5

您可以使用pyspark.sql.functions.concat()concatenate指定的任意多列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|
+----+----+----+----+
Run Code Online (Sandbox Code Playgroud)

concat()函数中,传递需要连接的所有列,例如concat('col1','col2')。如果有列表,则可以un-list使用*。所以(*['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|
+----+----+----+----+-----------------+
Run Code Online (Sandbox Code Playgroud)

  • 如果需要分隔符,请使用 concat_ws,如下所示(* 是分隔符): df = df.withColumn('concatenated_cols',concat_ws('*',*col_list)) (6认同)