首页 > 解决方案 > java中如何根据listwString>构造一个新列

问题描述

我有一个 List list =["a","b","c"] 并且我必须向我的数据框添加一个新列,但首先我必须构建它并且该列必须像:

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:我必须在我的函数 withColumn 中调用 String.join(","list),我没有选择

预期的结果是一个数据框:

 ------------------------------------------------------------
  x     y     z     a     b     c     **NewColumn**
 ------------------------------------------------------------
 val1  val2  val3  val4  val5  val6   val1|val2|val3|val4|val5|val6
 -------------------------------------------------------------

我看不到如何构建我的新专栏,谢谢您的帮助

标签: javasqlstringlistapache-spark

解决方案


函数concat将采用 type 参数,org.apache.spark.sql.Column但您传递的是 type 列表String

您必须将列表转换StringColumn类型列表并将这些值传递给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.
    )
);

推荐阅读