我选两个 Column 来自Dataframe的 col1 以及 col2 .
Column
col1
col2
df.select((col("a")+col("b")).as("sum_col")
现在用户想要这个 sum_col 固定间距为4。因此,长度 a 以及 b 因此最大值可以小于100(2)或大于100(3),所以需要有条件地添加1或2个空格。有人能告诉我怎么处理吗 select 用逻辑块来投射 Column 至 concat 并决定添加一个或两个空格
sum_col
a
b
select
concat
k2arahey1#
只是使用 format_string 功能
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'| // +-------+-----------+------+
kx1ctssn2#
定义一个自定义项,然后注册它。我在格式前面加了一个点,这样可以在输出中显示出来。看看这个
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>
ozxc1zmp3#
带string.format的自定义项:
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)
输出:
+---+---+-------+ |a |b |sum_col| +---+---+-------+ |1 |2 |0003 | +---+---+-------+
3条答案
按热度按时间k2arahey1#
只是使用
format_string
功能并证明其有效:
kx1ctssn2#
定义一个自定义项,然后注册它。我在格式前面加了一个点,这样可以在输出中显示出来。看看这个
ozxc1zmp3#
带string.format的自定义项:
输出: