Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如何在lpad中使用length函数,其中lpad的长度根据列值决定_Scala_Apache Spark_Apache Spark Sql_Scala Collections - Fatal编程技术网

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这适用于所有数字。。但是我希望每个数字都按照数字的数量来添加。