繁体   English   中英

java中如何根据listwString>构造一个新列

[英]How to construct a new column based on listwString> in java

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM