sql—如何在java中基于listwstring>构造新列

50few1ms  于 2021-05-17  发布在  Spark
关注(0)|答案(1)|浏览(401)

我有一个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
 -------------------------------------------------------------

我不知道如何建立我的新专栏,谢谢你的帮助

6ljaweal

6ljaweal1#

功能 concat 将采用类型为的参数 org.apache.spark.sql.Column 但你正在传递类型列表 String .
您必须转换 String 进入列表 Column 键入这些值并将其传递给 concat ```
def concat(exprs: org.apache.spark.sql.Column*): org.apache.spark.sql.Column

下面的代码是scala的,您可以将其转换成java。

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.
)
);

相关问题