使用Spark点灯和不使用Spark点灯有什么区别?

xpcnnkqh  于 2021-07-14  发布在  Spark
关注(0)|答案(1)|浏览(378)

我试图理解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))
lmvvr0a8

lmvvr0a81#

when 签名如下:

def when(condition: org.apache.spark.sql.Column,value: Any): org.apache.spark.sql.Column

类型 valueAny 它接受 Column 或数字/字符串等。
df3 你提供了 value 作为一个 Column 使用 lit ,鉴于 df4 你提供了 value 作为数字而不使用 lit .
它们是向提供值参数的等效方法 when ,但是 df4 是一种更简单的方法。在引擎盖下,我相信spark会将您提供的数值转换为一个文本列,类似于 lit 就行了。

相关问题