我有一个list=[“a”,“b”,“c”],我必须向我的dataframe添加一个新列,但首先我必须构造它,这个列必须如下所示:
x | y | z |列表
我的列表中的字符串是列,我的意思是我必须像这样构造我的请求:
SELECT x,y,z, list FROM Dataframe
我试着用
String.join("," , list)
但它被看作是一个单独的列而不是多个列
Dataset<Row> df= dataframe.withColumn("NewColumn", concat(dataframe.col("x"), lit("|"), dataframe.col("y"),lit("|"), String.join(","list));
注1:我的列表的大小是可编辑的,列也是可编辑的注2:我必须调用string.join(“,”list)在我的函数withcolumn中,我没有选择
预期结果是Dataframe:
------------------------------------------------------------
x y z a b c **NewColumn**
------------------------------------------------------------
val1 val2 val3 val4 val5 val6 val1|val2|val3|val4|val5|val6
-------------------------------------------------------------
我不知道如何建立我的新专栏,谢谢你的帮助
1条答案
按热度按时间6ljaweal1#
功能
concat
将采用类型为的参数org.apache.spark.sql.Column
但你正在传递类型列表String
.您必须转换
String
进入列表Column
键入这些值并将其传递给concat
```def concat(exprs: org.apache.spark.sql.Column*): org.apache.spark.sql.Column
val list = List("a","b","c")
dataframe.withColumn(
"NewColumn",
concat(
col("x"),
lit("|"),
col("y"),
lit("|"),
list.map(c => col(c)):_* // I have added this, You may need to convert your list of strings into list of columns, It will work.
)
);