如何将字符串添加到 spark 数据集中的字符串数组列
How to add string to string array column in spark dataset
我有一个 "Dataset(Row)" 如下
+-----+--------------+
|val | history |
+-----+--------------+
|500 |[a=456, a=500]|
|800 |[a=456, a=500]|
|784 |[a=456, a=500]|
+-----+--------------+
这里的 val 是 "String",history 是一个 "string array"。我正在尝试将 val 列中的内容添加到历史列中,以便我的数据集看起来像:
+-----+---------------------+
|val | history |
+-----+---------------------+
|500 |[a=456, b=500, c=500]|
|800 |[a=456, b=500, c=800]|
|784 |[a=456, b=500, c=784]|
+-----+---------------------+
此处 讨论了类似的问题,但我不了解 scala,无法创建类似的 java 解决方案。
请帮助我在 java
中实现这一目标
我编写了一个解决方案,但不确定是否可以进一步优化它
dataset.map(row -> {
Seq<String> seq = row.getAs("history");
ArrayList<String> list = new ArrayList<>(JavaConversions.seqAsJavaList(seq));
list.add("c="+row.getAs("val"));
return RowFactory.create(row.getAs("val"),list.toArray(new String[0]));},schema);
在 Spark 2.4(不是之前的版本)中,您可以使用 concat
函数连接两个数组。在您的情况下,您可以执行以下操作:
df.withColumn("val2", concat(lit("c="), col("val")))
.select(concat(col("history"), array(col("val2")));
注意:我第一次使用 concat
是连接字符串,第二次是连接数组。 array(col("val2"))
创建一个只有一个元素的数组。
我有一个 "Dataset(Row)" 如下
+-----+--------------+
|val | history |
+-----+--------------+
|500 |[a=456, a=500]|
|800 |[a=456, a=500]|
|784 |[a=456, a=500]|
+-----+--------------+
这里的 val 是 "String",history 是一个 "string array"。我正在尝试将 val 列中的内容添加到历史列中,以便我的数据集看起来像:
+-----+---------------------+
|val | history |
+-----+---------------------+
|500 |[a=456, b=500, c=500]|
|800 |[a=456, b=500, c=800]|
|784 |[a=456, b=500, c=784]|
+-----+---------------------+
此处
请帮助我在 java
中实现这一目标我编写了一个解决方案,但不确定是否可以进一步优化它
dataset.map(row -> {
Seq<String> seq = row.getAs("history");
ArrayList<String> list = new ArrayList<>(JavaConversions.seqAsJavaList(seq));
list.add("c="+row.getAs("val"));
return RowFactory.create(row.getAs("val"),list.toArray(new String[0]));},schema);
在 Spark 2.4(不是之前的版本)中,您可以使用 concat
函数连接两个数组。在您的情况下,您可以执行以下操作:
df.withColumn("val2", concat(lit("c="), col("val")))
.select(concat(col("history"), array(col("val2")));
注意:我第一次使用 concat
是连接字符串,第二次是连接数组。 array(col("val2"))
创建一个只有一个元素的数组。