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

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

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

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

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

  1. | inpCol | newCol |
  2. ------------------------
  3. | 154200231 | 123 |
  4. | 2343000566 | 656 |
  5. | 6543000453 | 345 |
gkl3eglg

gkl3eglg1#

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

  1. import org.apache.spark.sql.functions.lpad
  2. def lpadFunc() = {
  3. expr("lpad(a, length(a)*2, '0')").as("LPAD")
  4. }
  5. df.select("a", lpadFunc())

输出:

  1. +--------------+----------+
  2. | a | LPAD |
  3. +--------------+----------+
  4. | 111| 000111|
  5. | 2224| 00002224|
  6. | 33435|0000033435|
  7. +--------------+----------+

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

展开查看全部
kupeojn6

kupeojn62#

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

  1. val a = List(123,656,453,7889,64396)
  2. val length = a.map(_.length).max
  3. lpad(col("a"), length, "0")

然后用这个填充所有的。

相关问题