Scala 如何在lpad中使用length函数,其中lpad的长度根据列值决定
我有一个列,其中包含值为Scala 如何在lpad中使用length函数,其中lpad的长度根据列值决定,scala,apache-spark,apache-spark-sql,scala-collections,Scala,Apache Spark,Apache Spark Sql,Scala Collections,我有一个列,其中包含值为val a=List(123656453788964396)。 我希望像lpad(col(“a”),a.length,“0”)一样使用lpad。基本上,我不确定列表中数字的长度,所以我必须检查每个数字的长度,然后用操作系统lpad 基本上我有这个输入数据帧: (00123000656000453007889064396)。应用 val getRandom = udf((seed: String) => new Random(seed).shuffle(seed.to
val a=List(123656453788964396)
。
我希望像lpad(col(“a”),a.length,“0”)
一样使用lpad。基本上,我不确定列表中数字的长度,所以我必须检查每个数字的长度,然后用操作系统lpad
基本上我有这个输入数据帧:
(00123000656000453007889064396)
。应用
val getRandom = udf((seed: String) => new Random(seed).shuffle(seed.toCharArray.iterator).mkString("")
在数据帧上。但我的随机输出去掉了0。我想把它放进去
| inpCol | newCol |
------------------------
| 154200231 | 123 |
| 2343000566 | 656 |
| 6543000453 | 345 |
我建议首先找出
a
中任何数字字符串的最大长度
val a=List(123656453788964396)
val length=a.map(u.length).max
lpad(列(“a”),长度,“0”)
然后用它填充所有数字。根据您对@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。因此,与列中每个值的长度相同数量的零将被lpad添加到每个列值。您的意思是左pad还是什么
lpad
确切地说?lpad函数精确地显示您想要的输出?好的,我有一个解决方案。我是否理解正确,a
已经将这些数字作为字符串包含?我使用的是val a=sqlContext.table(tbl)。select(“colNm”).collect.map((0))。toString这适用于所有数字。。但是我希望每个数字都按照数字的数量来添加。