我试图理解Spark中点燃函数的作用。以下两个代码执行相同的操作
import spark.sqlContext.implicits._
import org.apache.spark.sql.functions._
import org.apache.spark.sql.types._
val data = Seq(("111",50000),("222",60000),("333",40000))
val df = data.toDF("EmpId","Salary")
val df2 = df.select(col("EmpId"),col("Salary"),lit("1").as("lit_value1"))
val df3 = df2.withColumn("lit_value2", when(col("Salary") >=40000 && col("Salary") <= 50000, lit("100").cast(IntegerType)).otherwise(lit("200").cast(IntegerType)))
// same as above!
val df4 = df2.withColumn("lit_value2", when(col("Salary") >=40000 && col("Salary") <= 50000, 100).otherwise(200))
1条答案
按热度按时间lmvvr0a81#
when
签名如下:类型
value
是Any
它接受Column
或数字/字符串等。在
df3
你提供了value
作为一个Column
使用lit
,鉴于df4
你提供了value
作为数字而不使用lit
.它们是向提供值参数的等效方法
when
,但是df4
是一种更简单的方法。在引擎盖下,我相信spark会将您提供的数值转换为一个文本列,类似于lit
就行了。