我需要创建一个连接许多列的数据帧,但我连接的每个元素都必须有一定数量的值才能遵循特定的布局。例如,我需要连接名称和姓氏,但名称总是必须有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 |
+----------------------------------------------------------------------------------------------------+------+