我有n个字符串列数组。我想用一个循环将这n列连接起来。
我有这个功能来连接列:
def concat(type):
def concat_(*args):
return list(chain(*args))
return udf(concat_, ArrayType(type))
concat_string_arrays = concat(StringType())
在下面的例子中,我有4列,我将这样连接:
df_aux = df.select('ID_col',concat_string_arrays(col("patron_txt_1"),col("patron_txt_2"),col('patron_txt_3'),col('patron_txt_0')).alias('patron_txt')
但是,如果我有200列,我怎么能用循环动态地使用这个函数?
答案 0 :(得分:0)
您可以使用from itertools import chain
from pyspark.sql.functions import col, udf
from pyspark.sql.types import *
df = sqlContext.createDataFrame([("1", "2","3","4"),
("5","6","7","8")],
('ID_col', 'patron_txt_0','patron_txt_1','patron_txt_2'))
def concat(type):
def concat_(*args):
return list(chain(*args))
return udf(concat_, ArrayType(type))
concat_string_arrays = concat(StringType())
#Select the columns you want to concatenate
cols = [c for c in df.columns if c.startswith("patron_txt")]
#Use the * operator to pass multiple columns to concat_string_arrays
df.select('ID_col',concat_string_arrays(*cols).alias('patron_txt')).show()
运算符将列列表传递给concat UDF:
+------+----------+
|ID_col|patron_txt|
+------+----------+
| 1| [2, 3, 4]|
| 5| [6, 7, 8]|
+------+----------+
这导致以下输出:
{{1}}