使用Scala将列与特定数量的寄存器连接起来



我需要创建一个连接许多列的数据帧,但我连接的每个元素都必须有一定数量的值才能遵循特定的布局。例如,我需要连接名称和姓氏,但名称总是必须有50个字符,即使名称较短,也要遵循特定的需求布局。我应该加一些空格来弥补名字中缺失的字母。

我正在使用这个代码,但它并没有给我想要的结果:

df.select(concat(rpad($"FirstName", 50, " "), rpad($"LastName", 50, " ")))

有人对我如何做到这一点有什么建议吗?

我认为您的解决方案是正确的。请设置truncate=";false";在show方法中,以防您使用火花壳进行目视检查。

这是测试测向数据:

scala> df.show
+---------+--------+
|FirstName|LastName|
+---------+--------+
|     John|   Smith|
|    James|    Bond|
+---------+--------+

现在,如果我们打印连接结果并将长度作为单独的列相加,我们就可以得到长度的总和:

scala> df
.select(concat(rpad($"FirstName", 50, " "), rpad($"LastName", 50, " "))
.as("concat"))
.withColumn("lenght", length(col("concat")))
.show(100, false)
+----------------------------------------------------------------------------------------------------+------+
|concat                                                                                              |lenght|
+----------------------------------------------------------------------------------------------------+------+
|John                                              Smith                                             |100   |
|James                                             Bond                                              |100   |
+----------------------------------------------------------------------------------------------------+------+

最新更新