Apache spark 使用pyspark对数据帧的多列进行Concat
假设我有一个列列表,例如:Apache spark 使用pyspark对数据帧的多列进行Concat,apache-spark,pyspark,apache-spark-sql,Apache Spark,Pyspark,Apache Spark Sql,假设我有一个列列表,例如: col_list=['col1','col2'] df=spark.read.json(路径到文件) 打印(df.列) #['col1','col2','col3'] 我需要通过连接col1和col2来创建一个新列。我不想在连接时硬编码列名,但需要从列表中选择它 如何执行此操作?您可以使用将列表中指定的列连接起来。继续将它们作为参数传递 从pyspark.sql.functions导入concat #创建示例数据帧 值=[('A1',11,'A3','A4'),('
col_list=['col1','col2']
df=spark.read.json(路径到文件)
打印(df.列)
#['col1','col2','col3']
我需要通过连接col1
和col2
来创建一个新列。我不想在连接时硬编码列名,但需要从列表中选择它
如何执行此操作?您可以使用将列表中指定的列连接起来。继续将它们作为参数传递
从pyspark.sql.functions导入concat
#创建示例数据帧
值=[('A1',11,'A3','A4'),('B1',22,'B3','B4'),('C1',33,'C3','C4')]
df=sqlContext.createDataFrame(值,['col1','col2','col3','col4'])
df.show()
+----+----+----+----+
|col1 | col2 | col3 | col4|
+----+----+----+----+
|A1 | 11 | A3 | A4|
|B1 | 22 | B3 | B4|
|C1 | 33 | C3 | C4|
+----+----+----+----+
在concat()。如果您有一个列表,您可以使用*
取消列表。所以(*['col1','col2'])
返回('col1','col2')
col_list=['col1','col2']
df=df.withColumn('连接列',连接列(*列列表))
df.show()
+----+----+----+----+-----------------+
|col1 | col2 | col3 | col4 |串联| u cols|
+----+----+----+----+-----------------+
|A1 | 11 | A3 | A4 | A111|
|B1 | 22 | B3 | B4 | B122|
|C1 | 33 | C3 | C4 | C133|
+----+----+----+----+-----------------+
我们可以用一个分隔符吗between@G.v.Sridhar您可以使用类似于concat(col(“a”)、lit(“”)、col(“b”))的内容,在lit()中您可以放置分隔符。如果您需要分隔符,请使用concat_ws,如下所示(*是分隔符):df=df.withColumn('concatated_cols',concat_ws('*',col list))