火花-select

时间:2018-10-04 12:45:37

标签: scala apache-spark hadoop bigdata

我正在从数据框Columncol1中选择两个col2

df.select((col("a")+col("b")).as("sum_col")

现在用户希望将此sum_col固定为4的空格。 因此ab的长度为2,因此最大值可以小于100(两个)或大于100(三个),因此需要有条件地添加1或2个空格。 / p>

任何人都可以告诉我如何使用cincintional逻辑在select块中进行处理,将Column转换为concat并确定要添加的一两个空格

3 个答案:

答案 0 :(得分:3)

只需使用format_string函数

import org.apache.spark.sql.functions.format_string

val df = Seq(1, 10, 100).toDF("sum_col")
val result = df.withColumn("sum_col_fmt", format_string("%4d", $"sum_col"))

并证明它有效:

result.withColumn("proof", concat(lit("'"), $"sum_col_fmt", lit("'"))).show
// +-------+-----------+------+
// |sum_col|sum_col_fmt| proof|
// +-------+-----------+------+
// |      1|          1|'   1'|
//|     10|         10|'  10'|
// |    100|        100|' 100'|
// +-------+-----------+------+

答案 1 :(得分:0)

具有String.format的UDF:

<form:input type="text" path="profile.email"/>

输出:

val df = List((1, 2)).toDF("a", "b")

val leadingZeroes = (value: Integer) => String.format("%04d", value)
val leadingZeroesUDF = udf(leadingZeroes)

val result = df.withColumn("sum_col", leadingZeroesUDF($"a" + $"b"))

result.show(false)

答案 2 :(得分:0)

定义一个UDF,然后注册它。我在格式前面添加了一个点,以便可以在输出中显示它。检查一下

scala> import org.apache.spark.sql.functions._
import org.apache.spark.sql.functions._

scala> val df = spark.range(1,20).toDF("col1")
df: org.apache.spark.sql.DataFrame = [col1: bigint]

scala>  val df2 = df.withColumn("newcol", 'col1 + 'col1)
df2: org.apache.spark.sql.DataFrame = [col1: bigint, newcol: bigint]

scala> def myPadding(a:String):String =
     | return ".%4s".format(a)
myPadding: (a: String)String

scala> val myUDFPad = udf( myPadding(_:String):String)
myUDFPad: org.apache.spark.sql.expressions.UserDefinedFunction = UserDefinedFunction(<function1>,StringType,Some(List(StringType)))

scala> df2.select(myUDFPad(df2("newcol"))).show
+-----------+
|UDF(newcol)|
+-----------+
|      .   2|
|      .   4|
|      .   6|
|      .   8|
|      .  10|
|      .  12|
|      .  14|
|      .  16|
|      .  18|
|      .  20|
|      .  22|
|      .  24|
|      .  26|
|      .  28|
|      .  30|
|      .  32|
|      .  34|
|      .  36|
|      .  38|
+-----------+


scala>