合并包含值数组的两列并在 scala 中创建一列?

问题描述 投票:0回答:1

我有一个具有两个数组列的数据框。我正在尝试通过将每个值 sep by 合并来将这两列合并为一列。例如,在下面的示例中,主题和标记应该合并并形成一个字符串类型的列,其值类似于 [eng:40,math:20]。有人可以在这里指点一下吗

 import spark.implicits._
val columns=Array("id", "subject","mark")
val df1=sc.parallelize(Seq(
  (1, Array("eng","math"),Array("10","20"))
  
)).toDF(columns: _*)

df1.printSchema
df1.show()

预期数据帧输出

id,newcol
1,[eng:40,math:20]
scala apache-spark
1个回答
0
投票

检查下面的代码。

df1.selectExpr(
    "id", 
    """
    TRANSFORM(
        ARRAYS_ZIP(subject, mark),
        e -> CONCAT( e.subject, ':', e.mark )
    ) as newcol
"""
)
.show(false)
+---+-----------------+
|id |newcol           |
+---+-----------------+
|1  |[eng:10, math:20]|
+---+-----------------+
© www.soinside.com 2019 - 2024. All rights reserved.