java - 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
-------------------------------------------------------------
我看不到如何构建我的新专栏,谢谢您的帮助
解决方案
函数concat
将采用 type 参数,org.apache.spark.sql.Column
但您传递的是 type 列表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.
)
);
推荐阅读
- spring - Spring 递归延迟加载子实体
- word2vec - most_similar_approx 的 topn 值较大时性能不佳
- django - 为什么我在我的 django 项目中得到 net::ERR_ABORTED 404 (Not Found)?
- php - Laravel 的加密和解密助手有多安全?
- excel - Excel VBA - 循环工作表,复制单元格,粘贴到新工作表中
- windows - 如何在我的 Mac 上的 Windows 平台上使用 Bazel 运行 Go 代码?
- python - 我们如何将每 n 行转置为 spark scala 中的列,如下所示
- angular - 从 ngFor 中获取一个值以用作嵌套形式的参数
- email - 用户填写阿拉伯语时接收电子邮件时出现问题
- clickhouse - 代码:306。DB::Exception:从 localhost:9000 接收。DB::Exception:堆栈大小太大。堆栈地址