scala—如何在lpad中使用length函数,其中lpad的长度根据列值决定

c3frrgcw  于 2021-05-29  发布在  Spark
关注(0)|答案(2)|浏览(444)

我有一个列,其中包含值 val a = List(123,656,453,7889,64396) . 我想像这样使用lpad lpad(col("a"), a.length, "0") . 基本上,我不确定列表中数字的长度,所以我必须检查每个数字的长度,然后用操作系统lpad它。
基本上我有这个输入Dataframe: (00123,000656,000453,007889,064396) . 以及申请

val getRandom = udf((seed: String) => new Random(seed).shuffle(seed.toCharArray.iterator).mkString("")

在Dataframe上。但是我的随机输出去掉了0。我想把它放进去。

| inpCol     |  newCol |
------------------------
|  154200231 |     123 |
| 2343000566 |     656 |
| 6543000453 |     345 |
gkl3eglg

gkl3eglg1#

根据您对@yann帖子的评论,您希望每个数字都按数字添加:
你可以试试这个。

import org.apache.spark.sql.functions.lpad

def lpadFunc() = {
   expr("lpad(a, length(a)*2, '0')").as("LPAD")
}

df.select("a", lpadFunc())

输出:

+--------------+----------+
|       a      |    LPAD  |
+--------------+----------+
|           111|    000111|
|          2224|  00002224|
|         33435|0000033435|
+--------------+----------+

这个函数的作用是:它将取列“a”的长度并将其加倍—然后应用lpadding。因此,与列中每个值的长度相同数量的零将添加到每个列值中。

kupeojn6

kupeojn62#

我建议你先找出你的数字串的最大长度 a 具有

val a = List(123,656,453,7889,64396)
val length = a.map(_.length).max

lpad(col("a"), length, "0")

然后用这个填充所有的。

相关问题